Befehl, der alle alten Dateien, Ordner und Unterordner löscht

Befehl, der alle alten Dateien, Ordner und Unterordner löscht

Ich brauche einen Befehl, der alle Dateien, Ordner und Unterordner löscht, die länger als 31 Tage nicht aktualisiert wurden. Ich habe diesen hier ausprobiert

find . -mindepth 1 -mtime +31 -exec rm -rf "{}" \;

Aber wenn ich eine Hierarchie wie diese habe

.
├── old_sub_folder1
└── old_sub_folder2
    ├── old_file
    └── old_sub_folder3
        └── new_file

wo old_*sich alte Ordner\Dateien befinden und new_filewo eine neue Datei ist.

Dieser Befehl löscht den gesamten Inhalt. Da old_sub_folder2das Datum nach der Erstellung nicht aktualisiert wurde new_file.

Ich brauche einen Befehl, der old_sub_folder2/old_sub_folder3/new_file nicht löscht

Antwort1

Das Problem besteht darin, dass Sie -rIhrem rmBefehl die Option hinzugefügt haben. Dadurch werden die Ordner gelöscht, auch wenn sie nicht leer sind.

Dies müssen Sie in zwei Schritten tun:

  1. Löschen Sie nur diealte Dateien:

    find . -type f -mtime +31 -delete

  2. Um alte Ordner zu löschen, wenn sie leer sind, können wir einen Blick darauf werfenHierund optimieren Sie es ein wenig:

    find . -type d -empty -mtime +31 -delete

Antwort2

find  . -type d ! -name . -mtime +31 -exec sh -c '
   case $(find "$1" ! -mtime +31 -exec echo x \; -prune) in
      "" ) rm -rf "$1" || echo "Error could not delete folder \"$1\"" ;;
   esac
' {} {} \;

Vom aktuellen Verzeichnis aus starten wir findund sehen uns nur directoriesdie an, die seit den letzten 31 Tagen nicht aktualisiert wurden. Und in jedem dieser Verzeichnisse tauchen wir wiederum ein und suchen nach allem, was nicht älter als 31 Tage ist. Wenn wir es finden, geben wir ein Dummy-Zeichen aus und beschneiden auch jede Vorwärtssuche (idealerweise sollten wir unsere Suche hier einfach mit beenden, -quitaber das ist nicht der Fall, POSIXdaher geben wir uns mit zufrieden -prune).

Dann suchen wir nach dem Ergebnis dieser findOperation und sollte es leer sein, wissen wir, dass nicht einmal ein Element (Datei/Verzeichnis/Link/usw.) neu war und dieses Verzeichnis daher gefahrlos gelöscht werden kann.

verwandte Informationen