![Wie protokolliere ich xargs -0 rm?](https://rvso.com/image/76409/Wie%20protokolliere%20ich%20xargs%20-0%20rm%3F.png)
Ich muss einfach Dateien einer bestimmten Erweiterung rekursiv finden und löschen. Ich habe also eine Syntax, die die Dateien findet, entfernt und in weiterleitet xargs -0 rm
, aber ich kann anscheinend kein Protokoll der entfernten Dateien erstellen.
Was ich bisher habe:
find /var/www/html -type f -regex ".*/.*\.(png|jpg)" -print0 |xargs -0 rm
Antwort1
rm
ist beim Löschen von Dateien normalerweise stumm. Wenn Sie ein Protokoll mit den gelöschten Dateien erstellen möchten, fügen Sie die -v
Option hinzu. Ersetzen Sie daher:
xargs -0 rm
mit:
xargs -0 rm -v >log
Antwort2
Sie können es verwenden find
, um Dateien zu löschen und gleichzeitig ihre Namen auf stdout zu schreiben:
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -delete -print >logfile
Notiz:Die Reihenfolge -delete
der -print
Optionen ist wichtig. Die zweite Option wird nur angewendet, wenn die erste Option „true“ zurückgibt, d. h. wenn die erste -delete
Option die Datei nicht löschen konnte, wird ihr Name nicht auf stdout ausgegeben. Wenn Sie die erste Option angeben -print
, wird der Dateiname auf stdout ausgegeben, unabhängig davon, ob -delete
die Datei wirklich gelöscht werden konnte.
Anmerkung 2: Ich musste Klammern und vertikale Linien maskieren, damit der reguläre Ausdruck standardmäßig mit dem find
Util meines Systems funktioniert. Alternativ können Sie beispielsweise angeben, -regextype
dass . Es lohnt sich jedenfalls, den Befehl zuerst ohne Option auszuprobieren, um zu prüfen, ob er Dateien richtig findet:posix-egrep
find
-delete
find /var/www/html -type f -regex ".*/.*\.\(png\|jpg\)" -print