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,
-inameprende un glob, non una regex