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