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:
- Zwischen
{}muss ein Leerzeichen stehen und; - Der
;muss maskiert werden, da es sich um ein Shell-Metazeichen handelt. - Wie @muru in seiner Antwort betonte,
-inamenimmt einen Glob, keinen regulären Ausdruck