Angenommen, ich habe ein Verzeichnis mit einer Reihe von Dateien:
/file1.png
/directory1/file1.png
/directory1/file2.png
/directory1/file3.txt
/file2.txt
/directory2/file1.png
/directory2/file2.txt
/directory2/file3.gif
Gibt es eine Möglichkeit, die Verzeichnisse mit --include
und rekursiv nach Dateien zu durchsuchen --exclude
?
Es wäre großartig, etwas zu finden, das so einfach ist wie:
find . --include "*.png" --exclude "file1.png"
find . -name "*.png" '!' -name "file1.png"
ist das Zitieren von!
nicht immer erforderlich, aber einfacher, auf Nummer sicher zu gehen. Für kompliziertere Fälle können Sie die vollständige Boolesche Logik verwenden-a -o ( )
(wobei die unterste Ebene-a
wie hier implizit sein kann), wie auf der Manpage beschrieben. wieder in der( )
Regel zitieren müssen.Antworten:
Um eine Datei auszuschließen, verwenden Sie entweder einen restriktiveren regulären Ausdruck als * .png oder greifen Sie auf die Ausgabe zu, um ein Ergebnis auszuschließen:
Sie können eine ganze Verzeichnisstruktur mit der
-prune
Option ausschließen, aber auf Dateiebene nicht.quelle
find
, der nimmt--include
oder in der Tat um eine Doppel Bindestrich; ITYM-name
oder vielleicht,-path
aber diese nehmen ein Muster an, kein regulärer Ausdruck ; Ihr Beispiel"*.png"
ist ein (richtig zitiertes) Muster und kein regulärer Ausdruck. Einigefind
s nehmen-regex
mit einem tatsächlichen regulären Ausdruck.