Find- und RM-Befehle löschen nicht rekursiv

Find- und RM-Befehle löschen nicht rekursiv

Wir haben ein einfaches Skript, das alte Ordner löschen soll. Das Problem ist, dass es sie nicht rekursiv löscht.

Dies ist der Befehl:

find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}

Es entfernt die Dateien und Ordner, versucht aber plötzlich, eine Datei aus einem Verzeichnis zu entfernen, das es bereits gelöscht hat.

Der Server läuftCentOS, und die Ordner werden mitNFSaus dem Speicher.

Was können wir tun?

Antwort1

Dies geschieht, weil der rmBefehl eine Liste aller gefundenen Dateien und Verzeichnisse erhält find. Dabei werden die in der Liste davor liegenden Verzeichnisse und gelöschten Dateien rekursiv sortiert.

Ich kann zwei Lösungen anbieten:

  1. Sortierenrekursiv findErgebnisse:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. Verwenden Sie -deletedie Option anstelle eines externen rmTools.find $PWD -maxdepth 5 -mtime +80 -delete

Aktualisierung 1 Wie vorgeschlagen@DimitarSie können hinzufügen, -type ddass find dann nur mit Verzeichnissen arbeitet. Das geht vielleicht schneller, aber in diesem Fall bereinigen Sie keine alten Dateien im $PWDVerzeichnis.

find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}

UPD.2Wie vorgeschlagen@ezra-sSie können es auch ohne tun xargs:

find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;

Und ich denke, das ist wirklich der beste Weg.

verwandte Informationen