Optimierte Methode zum Auflisten und Löschen von Dateien

Optimierte Methode zum Auflisten und Löschen von Dateien

Ich muss .php- und .xml-Dateien auflisten und löschen. Dazu verwende ich findden Befehl.

Auflisten : find . -type f -name \*.php -print0

Löschen : find . -type f -name \*.php -print0 | xargs -0 rm -r

Da ich es findzwei Mal ausführe. Ist es möglich, das Ergebnis des ersten Befehls zu speichern und dann im zweiten wiederzuverwenden?

Danke.

Antwort1

find . -type f -name '*.php' -print0 | tee list | tr \\0 \\n
xargs -r0 rm -f < list

Dies setzt voraus, dass Sie die Liste sehen möchten, bevor Sie sich zum Löschen entscheiden. Wenn nicht, können Sie einfach Folgendes tun:

find . -name '*.php' -type f -print -delete

(beachten Sie, dass -print0, -delete, -r, -0nicht Standard sind, aber von der GNU-Implementierung unterstützt werden)

Beachten Sie auch, dass find -deletedie erste Lösung zwar relativ sicher ist, aber zwischen dem Ausführen des Befehls findund xargsdem Ausführen des Befehls jemand Verzeichnisse in symbolische Links zu sensiblen Bereichen umbenennen und Sie dazu veranlassen könnte, Dateien zu löschen, die Sie nicht löschen wollten. Wenn Sie den Befehl findzweimal ausführen, wird dies beim zweiten Mal mit -deletevermieden.

Antwort2

Da Sie Dateien benötigen .php, sollte .xmlder findBefehl folgendermaßen aussehen:

find . \( -name '*.php' -o -name '*.xml' \) -type f -print -exec rm {} +

Die +Anweisungen dürfen nur einmal pro Dateiblock findverwendet werden . Wenn wir sie verwendet hätten , hätten wir für jede Datei einen Befehl ausgeführt.rm\;rm

verwandte Informationen