Sto cercando di fare find
stampa un elenco di directory che contengono file diversi dalle immagini jpg, ma penso che il mio uso di -exec
opzione è rotta. Il mio ambiente è 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'
Risposta accettata:
Un -exec
deve essere terminato con un ;
o un +
. Il ;
fa sì che il comando venga eseguito una volta per nome file trovato, mentre +
fa in modo che il comando venga eseguito una volta per tutti i nomi di file.
Ecco un esempio funzionante:
find ! -iname "*.JPG" -exec dirname {} ;
Alcune differenze notevoli rispetto ai tuoi tentativi:
- Deve esserci uno spazio tra
{}
e;
- Il
;
deve essere sottoposto a escape, perché è un metacarattere della shell. - Come ha sottolineato @muru nella sua risposta,
-iname
prende un glob, non una regex