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 rm
Befehl 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:
- Sortierenrekursiv
find
Ergebnisse:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
- Verwenden Sie
-delete
die Option anstelle eines externenrm
Tools.find $PWD -maxdepth 5 -mtime +80 -delete
Aktualisierung 1 Wie vorgeschlagen@DimitarSie können hinzufügen, -type d
dass find dann nur mit Verzeichnissen arbeitet. Das geht vielleicht schneller, aber in diesem Fall bereinigen Sie keine alten Dateien im $PWD
Verzeichnis.
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.