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 Ihrenfind
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 vontail
weil ich mich nie erinnern kann, ob ichtail -n +10
brauche odertail -n +11
.xargs -d '\n' rm
sammelt 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.