GNU/Linux >> Tutoriels Linux >  >> Linux

Obtenir l'option -exec dans Find To Work ?

J'essaie de faire find imprime une liste de répertoires contenant des fichiers autres que des images jpg, mais je pense que mon utilisation du -exec l'option est cassée. Mon environnement est Cygwin Bash.

$ find ! -iname "*.JPG$" -exec dirname

find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname {}

find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname;

find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname ;

find: missing argument to `-exec'
$ find ! -iname "*.JPG$" -exec dirname {};

find: missing argument to `-exec'

Réponse acceptée :

Un -exec doit se terminer par un ; ou un + . Le ; provoque l'exécution de la commande une fois par nom de fichier trouvé, alors que + provoque l'exécution de la commande une fois pour tous les noms de fichiers.

Voici un exemple fonctionnel :

find ! -iname "*.JPG" -exec dirname {} ;

Quelques différences notables par rapport à vos tentatives :

  1. Il doit y avoir un espace entre {} et ;
  2. Le ; doit être échappé, car il s'agit d'un métacaractère du shell.
  3. Comme @muru l'a souligné dans sa réponse, -iname prend un glob, pas une regex

Linux
  1. trouver -exec cmd {} + vs | xarg

  2. Pourquoi find -exec mv {} ./target/ + ne fonctionne-t-il pas ?

  3. Comment puis-je trouver la taille de pile maximale ?

  4. Comment diriger les résultats de 'find' vers mv sous Linux

  5. Quelle est la bonne syntaxe find -exec

Faire fonctionner 256 couleurs dans Tmux ?

Rechercher -exec + Vs Rechercher | Xargs :lequel choisir ?

Linux - Obtenir des fichiers pour la date actuelle sous Linux ?

La commande Linux find Directory :Explication

Expliquer la commande 'find -mtime'

trouver :-exec rm {} \ ; vs. -delete - pourquoi le premier est-il largement recommandé ?