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

So schließen Sie ein Verzeichnis in find aus. Befehl

Wenn -prune nicht für Sie funktioniert, wird dies:

find -name "*.js" -not -path "./directory/*"

Vorsicht: erfordert das Durchlaufen aller unerwünschten Verzeichnisse.


Verwenden Sie die -prune primär. Zum Beispiel, wenn Sie ./misc ausschließen möchten :

find . -path ./misc -prune -o -name '*.txt' -print

Um mehrere Verzeichnisse auszuschließen, OR sie in Klammern.

find . -type d \( -path ./dir1 -o -path ./dir2 -o -path ./dir3 \) -prune -o -name '*.txt' -print

Um Verzeichnisse mit einem bestimmten Namen auf jeder Ebene auszuschließen, verwenden Sie den -name primär statt -path .

find . -type d -name node_modules -prune -o -name '*.json' -print

Ich finde Folgendes einfacher zu begründen als andere Lösungsvorschläge:

find build -not \( -path build/external -prune \) -name \*.js
# you can also exclude multiple paths
find build -not \( -path build/external -prune \) -not \( -path build/blog -prune \) -name \*.js

Wichtiger Hinweis: die Pfade, die Sie nach -path eingeben muss genau mit find übereinstimmen würde ohne den Ausschluss drucken. Wenn dieser Satz Sie verwirrt, achten Sie einfach darauf, ganze vollständige Pfade zu verwenden Befehl wie folgt:find /full/path/ -not \( -path /full/path/exclude/this -prune \) ... . Siehe Anmerkung [1] für ein besseres Verständnis.

Innerhalb von \( und \) ist ein Ausdruck, der genau übereinstimmt build/external (siehe wichtigen Hinweis oben) und wird bei Erfolg vermeiden, irgendetwas darunter zu durchqueren . Dies wird dann als einzelner Ausdruck mit der Escape-Klammer gruppiert und mit -not vorangestellt was find ergibt alles überspringen, was diesem Ausdruck entspricht.

Man könnte fragen, ob man -not hinzufügt wird nicht alle anderen Dateien durch -prune verstecken wieder auftauchen, und die Antwort ist nein. Der Weg -prune funktioniert ist, dass, sobald es erreicht ist, die Dateien unterhalb dieses Verzeichnisses dauerhaft ignoriert werden.

Dies stammt aus einem tatsächlichen Anwendungsfall, bei dem ich yui-compressor für einige von Wintersmith generierte Dateien aufrufen musste, aber andere Dateien weglassen musste, die unverändert gesendet werden müssen.

Hinweis [1] :Wenn Sie /tmp/foo/bar ausschließen möchten und Sie führen find so aus "find /tmp \(... " dann müssen Sie -path /tmp/foo/bar angeben . Wenn Sie andererseits find wie folgt ausführen cd /tmp; find . \(... dann müssen Sie -path ./foo/bar angeben .


Linux
  1. Wie integriere ich den Mv-Befehl nach dem Find-Befehl?

  2. Verzeichnis in Suchen ausschließen?

  3. Ausschlussverzeichnis finden?

  4. Shell - Wie finde ich das Verzeichnis eines Befehls?

  5. Wie kann ich den Ordner, in dem gesucht wird, von find ausschließen?

So verschieben Sie ein Verzeichnis unter Linux

So schließen Sie den Grep-Befehl unter Linux aus

So schließen Sie ein Verzeichnis beim Suchen von Dateien in Linux aus

So zählen Sie Dateien im Verzeichnis unter Linux

So finden Sie die IP-Adresse in der Linux-Befehlszeile

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