Suchen Sie Dateien mit Einschluss- und Ausschlusskennzeichen

0

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 --includeund 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"
Bashaus
quelle
3
In diesem einfachen Fall 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 -awie hier implizit sein kann), wie auf der Manpage beschrieben. wieder in der ( )Regel zitieren müssen.
Dave_thompson_085
@ Dave_Thompson_085 Ich schlage vor, Ihren Kommentar eine Antwort zu machen
Janos

Antworten:

1

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:

find . -name "*.png" | grep -v "file1.png"

Sie können eine ganze Verzeichnisstruktur mit der -pruneOption ausschließen, aber auf Dateiebene nicht.

Woolfie
quelle
Ich habe noch nie eine gesehen find, der nimmt --includeoder in der Tat um eine Doppel Bindestrich; ITYM -nameoder vielleicht, -pathaber diese nehmen ein Muster an, kein regulärer Ausdruck ; Ihr Beispiel "*.png"ist ein (richtig zitiertes) Muster und kein regulärer Ausdruck. Einige finds nehmen -regexmit einem tatsächlichen regulären Ausdruck.
Dave_thompson_085
Sie haben Recht, ich habe nur einen Teil des ursprünglichen Beitrags zitiert, ohne zu viel zu überprüfen. Ich bearbeite es, um es zu korrigieren.
Woolfie