Ich konnte die Aktion -prune des Befehls find nie vollständig verstehen. Aber in Wirklichkeit stammt zumindest ein Teil meines Mißverständnisses von der Wirkung des Weglassens des Ausdrucks »Ausdruck«.'-print' aus dem Befehl 'find' auslassen, wenn '-prune' verwendet wird
Von der Seite ‚finden‘ Mann ..
„Wenn der Ausdruck keine andere Aktionen als -prune enthält, -Druck auf alle Dateien, für die durchgeführt wird, der Ausdruck wahr ist.“
.. was ich immer (seit vielen Jahren) so gemeint habe, dass ich '-print' weglassen kann.
Wie jedoch das folgende Beispiel zeigt, ist ein Unterschied zwischen der Verwendung von '-print' und dem Auslassen von '-print', zumindest wenn ein '-prune' Ausdruck erscheint.
Zunächst einmal habe ich die folgenden 8 Verzeichnisse unter meinem Arbeitsverzeichnis ..
aqua/
aqua/blue/
blue/
blue/orange/
blue/red/
cyan/blue/
green/
green/yellow/
Es gibt insgesamt 10 Dateien in diesen Verzeichnissen 8 ..
aqua/blue/config.txt
aqua/config.txt
blue/config.txt
blue/orange/config.txt
blue/red/config.txt
cyan/blue/config.txt
green/config.txt
green/test.log
green/yellow/config.txt
green/yellow/test.log
Mein Ziel ist Verwenden Sie "Find", um alle regulären Dateien anzuzeigen, die nicht den Pfad "blau" enthalten. Es gibt fünf Dateien, die diese Anforderung erfüllen.
Dies funktioniert wie .. erwartet
% find . -path '*blue*' -prune -o -type f -print
./green/test.log
./green/yellow/config.txt
./green/yellow/test.log
./green/config.txt
./aqua/config.txt
Aber als ich ‚-print‘ es gibt die fünf gewünschten Dateien lassen sich nicht nur, sondern auch ein beliebiges Verzeichnis, dessen Pfadname ‚blue‘ enthält ..
% find . -path '*blue*' -prune -o -type f
./green/test.log
./green/yellow/config.txt
./green/yellow/test.log
./green/config.txt
./cyan/blue
./blue
./aqua/blue
./aqua/config.txt
Warum werden die drei 'blauen' Verzeichnisse angezeigt?
Dies kann von Bedeutung sein, da ich oft versuche, eine Verzeichnisstruktur zu entfernen, die mehr als 50.000 Dateien enthält. Wenn dieser Pfad verarbeitet wird, kann mein find-Befehl, besonders wenn ich eine '-exec grep' für jede Datei mache, sehr viel Zeit in die Verarbeitung von Dateien investieren, für die ich absolut kein Interesse habe. Ich muss darauf vertrauen, dass der Fund nicht in die überarbeitete Struktur geht.