2016-07-04 4 views
0

Ich führe ein Skript auf einer Gruppe von mint/ubuntu-VMs, die jede Woche genau 23 Dateien herunterlädt, sie einzeln ausarbeitet und eine große Datei (1..3 GB) für jede heruntergeladene Datei erstellt.Bash: Wie lösche ich die n-te älteste Datei in einem Ordner?

Heruntergeladene Dateien befinden sich in einem Ordner und ausgearbeitete Dateien befinden sich in einem anderen Ordner.

Da der Skripthandle eine Datei zu der Zeit heruntergeladen hat und eine neue ausgearbeitete Datei erstellt hat, möchte ich am Ende der Ausarbeitung die ältesten Dateien automatisch in beiden Ordnern löschen.

Meine Idee war es, Ordnerinhalt nach absteigender modifizierter Zeit sortiert aufzulisten und Datei ab 24 zu löschen.

Ist es möglich, dies mit bash zu realisieren (so kann ich es cron)?

+1

Sicher, es sollte etwas aussehen wie 'ls -ltr | tail -1' – GMichael

+0

Ihr Befehl zeigt mir den ältesten, aber mein Ziel ist es, eine Liste beginnend mit dem 24. ältesten zu bekommen, weil ich die 23 neuesten Dateien behalten und alle anderen löschen muss, falls vorhanden. Beachten Sie, dass in einer bestimmten Woche weniger als 23 Dateien vorhanden sind. Daher ist es wichtig, dass das Skript nur vom 24. ältesten gelöscht wird und nur dann, wenn sich mindestens 23 Dateien auf der Festplatte befinden. – realtebo

+0

http://stackoverflow.com/a/299911/2088135 –

Antwort

1

Wenn Sie eine Liste von allem, und Sie mögen die Leitung 24 aus, dass, können Sie Rohr es durch den folgenden einfachen sed Skript:

thing_that_generates_list | sed -n '24p' 

Wenn Sie alle Zeilen von der Linie 24 bis zum Ende , verwenden Sie

thing_that_generates_list | sed -n '24,$p' 
+0

Ich habe 'ls -lt | sed -n '25, $ p''. Ich habe '25' anstelle von' 24' verwendet, weil die erste Zeile der Ausgabe die Gesamtgröße in Bytes ist. Vielen Dank – realtebo

Verwandte Themen