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

Shell-Skript, um Dateien zu zählen und dann die ältesten Dateien zu entfernen

Stellen Sie sicher, dass Ihr pwd das richtige Verzeichnis ist, um die Dateien dann zu löschen (unter der Annahme, dass nur reguläre Zeichen im Dateinamen enthalten sind):

ls -A1t | tail -n +11 | xargs rm

hält die neuesten 10 Dateien. Ich verwende dies mit dem Kameraprogramm 'motion', um die neuesten Frame-Grab-Dateien zu speichern. Vielen Dank an alle weiteren Antworten, weil Sie mir gezeigt haben, wie es geht.


find ist das übliche Werkzeug für diese Art von Aufgabe :

find ./my_dir -mtime +10 -type f -delete

ERKLÄRUNGEN

  • ./my_dir Ihr Verzeichnis (durch Ihr eigenes ersetzen)
  • -mtime +10 älter als 10 Tage
  • -type f nur Dateien
  • -delete keine Überraschung. Entfernen Sie es, um Ihren find zu testen filtern, bevor der gesamte Befehl ausgeführt wird

Und achten Sie darauf, dass ./my_dir existiert, um böse Überraschungen zu vermeiden !


Der richtige Weg, so etwas zu tun, ist mit logrotate .


Versuchen Sie Folgendes:

ls -t | sed -e '1,10d' | xargs -d '\n' rm

Dies sollte alle Zeichen (außer Zeilenumbrüche) in einem Dateinamen behandeln.

Was ist hier los?

  • ls -t listet alle Dateien im aktuellen Verzeichnis in absteigender Reihenfolge der Änderungszeit auf. Dh die zuletzt geänderten Dateien sind zuerst, ein Dateiname pro Zeile.
  • sed -e '1,10d' löscht die ersten 10 Zeilen, dh die 10 neuesten Dateien. Ich verwende dies anstelle von tail weil ich mich nie erinnern kann, ob ich tail -n +10 brauche oder tail -n +11 .
  • xargs -d '\n' rm sammelt jede Eingabezeile (ohne den abschließenden Zeilenumbruch) und übergibt jede Zeile als Argument an rm .

Wie bei allem dieser Art experimentieren Sie bitte an einem sicheren Ort.


Linux
  1. Wie erhalte ich den Distributionsnamen und die Versionsnummer in einem einfachen Shell-Skript?

  2. Shell-Skript parallel ausführen

  3. Aktuelles Verzeichnis des Shell-Skripts?

  4. Zählen Sie Zeilen in großen Dateien

  5. Gibt es ein Programm/Skript zum Ändern von .conf-Dateien?

Bash-Skript zum Entfernen der ältesten Datei aus einem Ordner?

Shell-Skript:Dateien in Verzeichnisse und Unterverzeichnisse sortieren?

Prozesse in einer Sitzung in einer interaktiven Shell oder in einem Skript?

Wie zähle ich die Anzahl der Dateien in einem Verzeichnis und lösche die ältesten, wenn die Anzahl 5 überschreitet?

Die Bedeutung von $? In einem Shell-Skript?

Wie führe ich einen Befehl in einem Shell-Skript aus?