GNU/Linux >> Linux Esercitazione >  >> Linux

Ottenere l'opzione -exec in Trova per funzionare?

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:

  1. Deve esserci uno spazio tra {} e ;
  2. Il ; deve essere sottoposto a escape, perché è un metacarattere della shell.
  3. Come ha sottolineato @muru nella sua risposta, -iname prende un glob, non una regex

Linux
  1. Trova -exec + Vs Trova | Xargs:quale scegliere?

  2. Trova il computer su una rete LAN?

  3. Linux:ottenere file per la data corrente in Linux?

  4. Perché find -exec mv {} ./target/ + non funziona?

  5. Come trovo la dimensione massima dello stack?

Il comando Trova Directory di Linux:spiegato

trova -exec cmd {} + vs | xargs

trovare -exec una funzione di shell in Linux?

adb:trova PID dalla shell adb

Spiegazione del comando 'find -mtime'

Qual è la sintassi corretta di find -exec