GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die Option -exec in Find zum Laufen bringen?

Ich versuche find zu machen Drucken Sie eine Liste von Verzeichnissen aus, die andere Dateien als JPG-Bilder enthalten, aber ich denke, meine Verwendung der -exec Option ist kaputt. Meine Umgebung ist 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'

Akzeptierte Antwort:

Ein -exec muss mit einem ; abgeschlossen werden oder ein + . Der ; bewirkt, dass der Befehl einmal pro gefundenem Dateinamen ausgeführt wird, während + bewirkt, dass der Befehl einmal für alle Dateinamen ausgeführt wird.

Hier ist ein funktionierendes Beispiel:

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

Einige bemerkenswerte Unterschiede zu Ihren Versuchen:

  1. Zwischen {} muss ein Leerzeichen stehen und ;
  2. Der ; muss maskiert werden, da es sich um ein Shell-Metazeichen handelt.
  3. Wie @muru in seiner Antwort betonte, -iname nimmt einen Glob, keinen regulären Ausdruck

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

  2. Warum funktioniert find -exec mv {} ./target/ + nicht?

  3. Wie finde ich die maximale Stapelgröße?

  4. adb:Finden Sie PID aus der Adb-Shell

  5. Wie man die Ergebnisse von 'find' unter Linux an mv weiterleitet

Eine benutzerfreundliche Alternative zum Find-Tool in Linux

Wie funktioniert das Sticky Bit?

Wie funktionieren die Interna von Sudo?

Brechen Sie von Find ab, wenn ein -exec fehlschlägt?

Finden Sie den Computer in einem LAN-Netzwerk?

Der Linux-Befehl zum Suchen des Verzeichnisses:Erklärt