GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Skript zum Löschen von Dateien, die älter als x Tage sind, mit Unterverzeichnissen

type Option zum Filtern von Ergebnissen

find akzeptiert den type Option zum Auswählen von beispielsweise nur Dateien.

find /path/to/files -type f -mtime +10 -delete

Lassen Sie -delete weg um zu zeigen, was es löschen würde, und wenn Sie das überprüft haben, fahren Sie fort und führen Sie den vollständigen Befehl aus.

Das würde nur auf Dateien laufen, nicht auf Verzeichnissen. Verwenden Sie -type d im umgekehrten Fall nur Verzeichnisse auflisten, die mit Ihren Argumenten übereinstimmen.

Zusätzliche Optionen

Vielleicht möchten Sie man find lesen , da es einige weitere Optionen gibt, die Sie in Zukunft benötigen könnten. Beispiel:-maxdepth würde es Ihnen ermöglichen, die gefundenen Elemente nur auf eine bestimmte Tiefe einzuschränken, z. -maxdepth 0 würde nicht in Unterverzeichnisse rekursiv.

Einige Anmerkungen

  • Ich frage mich, wie der Befehl einen Ordner entfernt hätte, da Sie einen Ordner nicht mit rm entfernen können nur. Sie benötigen rm -r dafür.

  • Auch /path/to/files* ist verwirrend. Meinten Sie /path/to/files/ oder erwarten Sie, dass der Platzhalter auf mehrere Datei- und Ordnernamen erweitert wird?

  • Geben Sie {} ein in einfachen Anführungszeichen, also '{}' um zu vermeiden, dass der ersetzte Datei-/Verzeichnisname von der Shell interpretiert wird, genauso wie wir das Semikolon mit einem umgekehrten Schrägstrich schützen.


Wie in den vorherigen Antworten (+1 für beide) besteht der Trick darin, -type f zu verwenden Prädikat.

Beachten Sie, dass anstelle von -exec rm '{}' Sie können auch -delete verwenden Prädikat. Aber tun Sie das nicht. Mit -exec rm '{}' Sie können (und sollten) zuerst -exec echo rm '{}' tun um zu überprüfen, ob dies wirklich das ist, was Sie wollen. Führen Sie danach den Befehl ohne echo erneut aus .

Mit -delete ist schneller (kein zusätzliches fork() und execve() für jede Datei), aber das ist riskant, weil -delete funktioniert auch als Bedingung, also:

# delete *.tmp files
find . -type f -name '*.tmp' -delete

aber wenn Sie NUR Argumente tauschen:

# delete ALL files
find . -type f -name '*.tmp' -delete

Falls Sie jemals find brauchen und rm Um schneller mit Tonnen von Dateien zu arbeiten, sehen Sie sich find ... | xargs ... rm an UNIX-Idiom.


Linux
  1. Wie lösche ich alle Dateien, die älter als X Tage in Linux sind?

  2. Warum gibt Find -mtime +1 nur Dateien zurück, die älter als 2 Tage sind?

  3. So entfernen Sie Dateien, die älter als N Tage sind, mit tmpreaper in Linux

  4. So löschen Sie die Dateien, die älter als n Tage sind, OHNE den Befehl find zu verwenden

  5. So finden und löschen Sie Dateien, die älter als ein bestimmter Zeitraum in Linux sind

So löschen Sie Dateien, die älter als die angegebenen Tage in Linux sind

Finden Sie alle Dateien, die älter als eine Minute sind

Verzeichnisse mit allen Dateien finden, die älter als X sind?

Ordnungsgemäßes Löschen von Dateien, die älter als 30 Tage sind

Auffinden von Dateien, die älter als x Tage sind, auf einem System mit abgespeckter Busybox

Cron-Job zum Löschen aller Dateien älter als 7 Tage mit Erweiterung in einem bestimmten Ordner - funktioniert nicht