GNU/Linux >> Znalost Linux >  >> Linux

Získání možnosti -exec v aplikaci Najít do práce?

Snažím se find vytisknout seznam adresářů, které obsahují jiné soubory než obrázky jpg, ale myslím, že používám -exec možnost je rozbitá. Moje prostředí je 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'

Přijatá odpověď:

-exec musí být ukončen znakem ; nebo + . ; způsobí, že se příkaz vykoná jednou pro každý nalezený název souboru, zatímco + způsobí, že příkaz bude proveden jednou pro všechny názvy souborů.

Zde je pracovní příklad:

find ! -iname "*.JPG" -exec dirname {} ;

Některé významné rozdíly oproti vašim pokusům:

  1. Mezi {} musí být mezera a ;
  2. The ; musí být escapováno, protože se jedná o metaznak shellu.
  3. Jak @muru zdůraznil ve své odpovědi, -iname bere globus, nikoli regulární výraz

Linux
  1. find -exec cmd {} + vs | xargs

  2. adb:Najděte PID z prostředí adb

  3. Jak přenést výsledky 'najít' do mv v Linuxu

  1. Vysvětlení příkazu 'find -mtime'

  2. najít:-exec rm {} \; vs. -delete - proč je první široce doporučován?

  3. Jaká je správná syntaxe find -exec

  1. Přátelská alternativa k nástroji find v Linuxu

  2. Jak fungují vnitřnosti sudo?

  3. Linux – Jak získat možnosti jednotky Cd/dvd, když zařízení Wodim nefungují?