Wie kann mein System alle Dateien in einem bestimmten Verzeichnis löschen, die älter als eine bestimmte Zeit sind, während die Verzeichnisstruktur intakt bleibt?

12

Ich habe ein Verzeichnis auf meinem Computer, stelle es mir als meine eigene Art von tmpVerzeichnis vor, aber es befindet sich in meinem ~Verzeichnis. Und ich möchte, dass mein System alle 3 Stunden alle Dateien in diesem Verzeichnis löscht (obwohl alle Verzeichnisstrukturen intakt bleiben, aber immer noch alle Dateien in allen Ebenen der Verzeichnisse rekursiv gelöscht werden), die älter als ein Tag sind.

Ich verwende Ubuntu GNOME 15.10 mit GNOME 3.18. Ist das möglich? Und wenn ja, wie? Ich möchte, dass dies vollständig automatisiert ist und keine Benutzerinteraktion erforderlich ist. Dies sollte automatisch gestartet werden, wenn ich mich anmelde, damit ich nicht bei jedem Start etwas ausführen muss.


quelle

Antworten:

21

Verwenden von find:

find ~/tmp -type f -mtime +0 -delete
  • ~/tmp Soll das Verzeichnis rekursiv durchsucht werden, ändern Sie dies entsprechend

  • -type f sucht nur nach Dateien

  • -mtime +0 Dies entspricht einer Datei, wenn sie vor einem Tag oder später zuletzt geändert wurde

  • -delete entfernt nur die übereinstimmende (n) Datei (en)

Hier ist der Haken -mtime +0, die meisten denken vielleicht über die Verwendung nach -mtime +1, findignorieren jedoch die Bruchzeit bei der Berechnung der Tage. Stimmt also -mtime +1mit einer Datei überein, wenn die letzte Änderung vor mindestens 2 Tagen vorgenommen wurde.

Zitat man find, -mtimehat die gleiche Timing-Konvention wie -atime:

-Zeit n

Auf die Datei wurde zuletzt vor n * 24 Stunden zugegriffen. Wenn ermittelt wird, wie viele 24-Stunden-Zeiträume vor dem letzten Zugriff auf die Datei vergangen sind, wird jeder Bruchteil ignoriert. Um also mit -atime +1 übereinzustimmen, muss vor mindestens zwei Tagen auf eine Datei zugegriffen worden sein.

Beachten Sie auch, dass Sie, wenn Sie Präzision wünschen, die -mminOption findzur Angabe der Zeit in Minuten in Betracht ziehen sollten .

Um es nach 3 Stunden regelmäßig auszuführen, können Sie einen cronEintrag hinzufügen .

Führen Sie Folgendes aus crontab -eund fügen Sie Folgendes hinzu:

00 */3 * * * /usr/bin/find ~/tmp -type f -mtime +0 -delete

So zshentfernen Sie die Dateien:

rm ~/tmp/**/*(.-m+0)

Hinzufügen zu cron:

00 */3 * * * /usr/bin/zsh -c 'rm ~/tmp/**/*(.-m+0)'
heemayl
quelle
6

Sie sollten in der Lage sein, alle Dateien zu löschen, die älter als 1 Tag sind, /home/username/directoryund alle Verzeichnisse darunter mit:

find /home/username/directory -type f -mtime +1 -delete

Um diesen Befehl alle drei Stunden zu planen, legen Sie ihn als Cron-Job fest:

crontab -e

Dann in der Crontab:

0 */3 * * * find /home/username/directory -type f -mtime +1 -delete

Womit Ihr Befehl alle drei Stunden zur vollen Stunde ausgeführt wird (z. B. Minute 0), also 3:00 Uhr, 6:00 Uhr usw.

Klicken Sie auf cronund, crontab manpagesum weitere Informationen zu erhalten.

Limecat
quelle
4
Diese Antwort ist tatsächlich falsch, siehe die andere Antwort .
4
Da diese Antwort falsch ist und nicht mehr als die andere Antwort aussagt, verbessern Sie Ihre Antwort entweder so, dass sie korrekt und besser ist als die andere Antwort, oder löschen Sie sie.
5
@ParanoidPanda Ich verstehe, dass Sie qualitativ hochwertige Antworten wünschen, aber im Wesentlichen dasselbe zweimal zu kommentieren, ist ziemlich unnötig und könnte als aggressiv angesehen werden, insbesondere für einen neuen Benutzer.
RPiAwesomeness
2
@RPiAwesomeness: Nun, ich habe das zweite Mal kommentiert, weil ich nicht mehr genügend Zeit hatte, um meinen ersten Kommentar zu bearbeiten, und ich wollte auch sagen, dass sie ihre Antwort löschen sollten, die vielleicht nicht unbedingt von meinem ersten Kommentar verstanden wurde, obwohl ich Sie wollten nicht, dass sie angegriffen werden und als ob ich nur gesagt hätte, dass sie die falsche Antwort gegeben hätten und sie jetzt löschen müssten, fügte ich etwas über die Verbesserung hinzu. Aber ich kann sehen, wie dies falsch verstanden werden kann, und bitte Sie, sich daran zu erinnern: Ein Panda wird nur aggressiv, wenn Sie seinen Bambus wegnehmen. ;-)