Ich muss .php- und .xml-Dateien auflisten und löschen. Dazu verwende ich find
den Befehl.
Auflisten :
find . -type f -name \*.php -print0
Löschen :
find . -type f -name \*.php -print0 | xargs -0 rm -r
Da ich es find
zwei 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
, -0
nicht Standard sind, aber von der GNU-Implementierung unterstützt werden)
Beachten Sie auch, dass find -delete
die erste Lösung zwar relativ sicher ist, aber zwischen dem Ausführen des Befehls find
und xargs
dem 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 find
zweimal ausführen, wird dies beim zweiten Mal mit -delete
vermieden.
Antwort2
Da Sie Dateien benötigen .php
, sollte .xml
der find
Befehl folgendermaßen aussehen:
find . \( -name '*.php' -o -name '*.xml' \) -type f -print -exec rm {} +
Die +
Anweisungen dürfen nur einmal pro Dateiblock find
verwendet werden . Wenn wir sie verwendet hätten , hätten wir für jede Datei einen Befehl ausgeführt.rm
\;
rm