Ich habe den Befehl zum Löschen von Dateien gefunden, die älter als 5 Tage in einem Ordner sind
find /path/to/files* -mtime +5 -exec rm {} \;
Aber wie mache ich das auch für Unterverzeichnisse in diesem Ordner?
files
find
rm
timestamps
Teddy291
quelle
quelle
find /path/to -type d -empty -delete
rm test one
. (Dadurch werden eine Datei mit dem Namen "test" und eine Datei mit dem Namen "one" gelöscht, jedoch keine Datei mit dem Namen "test one"). Tipp: -delete or -print0find
, um Probleme mit Sonderzeichen zu vermeiden, wie in der ersten Zeile der Antwort angegeben. ZB:find /path/to/files/ -exec somecommand '{}' \;
Antworten:
Seien Sie vorsichtig mit speziellen Dateinamen (Leerzeichen, Anführungszeichen), wenn Sie an rm leiten.
Es gibt eine sichere Alternative - die Option -delete :
Das war's, kein separater RM-Aufruf, und Sie müssen sich keine Gedanken über Dateinamen machen.
Ersetzen Sie
-delete
mit-depth -print
, um diesen Befehl zu testen, bevor Sie ihn ausführen (-delete
impliziert-depth
).quelle
-type f
diese Option auch, um nur Dateien zu löschen (und Unterverzeichnisse beizubehalten)find /path/to/dir\ with\ spaces/ -mindepth 1 -mtime +5 -delete
?find
Argument ein Filter ist, der das Ergebnis des vorherigen Filters als Eingabe verwendet. Stellen Sie also sicher, dass Sie -delete als letztes Argument hinzufügen. IE:find . -delete -mtime +5
löscht ALLES im aktuellen Pfad.Beachten Sie, dass dieser Befehl nicht funktioniert, wenn zu viele Dateien gefunden werden. Es wird ein Fehler wie folgt ausgegeben:
Dies bedeutet, dass das Limit des Systemaufrufs exec für die Länge einer Befehlszeile überschritten wurde. Anstatt rm auf diese Weise auszuführen, ist es wesentlich effizienter, xargs zu verwenden . Hier ist ein Beispiel, das funktioniert:
Dadurch werden alle Dateien (Typ f), die vor mehr als 14 Tagen unter / root / Maildir / rekursiv geändert wurden, entfernt (mindepth 1). Weitere Optionen finden Sie im Suchhandbuch .
quelle
find /root/Maildir/ -mindepth 1 -type f -mtime +14 -print0 | xargs -r0 rm --
Es ist das gleiche. Sie müssen nur das übergeordnete Verzeichnis und nicht das Präfix der Dateien angeben. In Ihrem Beispiel wäre es:
Dadurch werden alle Dateien, die älter als 5 Tage sind,
/path/to
und ihre Unterverzeichnisse gelöscht .Informationen zum Löschen leerer Unterverzeichnisse finden Sie in @Costas Kommentar oben.
quelle
+
in diesem Fall entkommen müssen . - 2) Besser schreiben-exec rm '{}' +
, um das Übel von Dateien mit Sonderzeichen (Leerzeichen, Zeilenumbrüche usw.) im Namen abzuwehren.quelle