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,
-inameprend un glob, pas une regex