2017-07-27 2 views
0

Wie in Bash würde ich alle Verzeichnisse außer den neuesten fünf erstellten Verzeichnisse (nach Datum erstellt Zeit) entfernen?Entfernen aller Verzeichnisse außer den 10 neuesten

Dies wird von einem Build-Skript verwendet, und wir möchten alte Builds aufräumen. Vielen Dank.

Edit: Datum geändert Zeit ist auch in Ordnung.

Antwort

1

Es ist nicht trivial, eine Erstellungszeit für Dateien zu erhalten. Sehen Sie hier als Referenz: https://unix.stackexchange.com/questions/20460/how-do-i-do-a-ls-and-then-sort-the-results-by-date-created

Aber wenn Sie gerne bis zur letzten Änderung Zeit statt (das sollte hier in Ordnung sein?) Dann sollte so etwas wie dieser One-Liner tun.

ls -dt */ | tail -n +6 | xargs rmdir

  • ls -d */ Liste Verzeichnisse -t sie in der Reihenfolge druckt
  • tail -n +6 listet alle, aber die letzten fünf Zeilen
  • xargs rmdir Anrufe rm -r auf jedem dieser Verzeichnisse (oder Sie können rm -r verwenden, wenn sie‘ (nicht leer)
+1

Es kann +6 sein, um zuerst 5 zu überspringen und zu starten in Zeile 6 –

0

Es könnte mit ls gemacht werden, aber Parsing ls Ausgabe ist nicht sicher.

Da es keine eingebaute Shell gibt, um Dateizeit zu erhalten, eine Lösung, die perl verwendet.

perl -e ' 
    @A = sort {(stat($a))[9]<=>(stat($b))[9]} <*/>; 
    rmdir for splice (@A,0,-10) 
' 

-Test

mkdir tmp && cd tmp 
for d in {A..Z}; do mkdir "$d"; done 
ls 

perl -e ' 
    @A = sort {(stat($a))[9]<=>(stat($b))[9]} <*/>; 
    rmdir for splice (@A,0,-10) 
' 

ls 

EDIT: splice(@A,0,-10) zu @A[0..$#A-10] geändert werden könnte, vielleicht leichter zu lesen. Um alle Elemente außer den letzten 10 zu erhalten.

Verwandte Themen