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_dirIhr Verzeichnis (durch Ihr eigenes ersetzen)-mtime +10älter als 10 Tage-type fnur Dateien-deletekeine Überraschung. Entfernen Sie es, um Ihrenfindzu 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 -tlistet 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 vontailweil ich mich nie erinnern kann, ob ichtail -n +10brauche odertail -n +11.xargs -d '\n' rmsammelt jede Eingabezeile (ohne den abschließenden Zeilenumbruch) und übergibt jede Zeile als Argument anrm.
Wie bei allem dieser Art experimentieren Sie bitte an einem sicheren Ort.