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"

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.