Behalten Sie nur die letzten zwei Ordner im Verzeichnis

0

Ich habe ein Verzeichnis mit folgenden Ordnern.

Data-2014-07-10-0240
Data-2014-07-10-0340
Data-2014-07-11-1232
Data-2014-07-12-0530
Data-2014-07-13-1210

Ich möchte nur die letzten zwei Ordner behalten und den Rest löschen. Der Ordner ist in diesem Format: Data-YYYY-MM-DD-HHMM.

Gibt es eine Möglichkeit, mit der ich die Ordnernamen vergleichen und die neuesten behalten und den Rest löschen kann? Ich kann dies später in meinem Shell-Skript anpassen.

Mahesh
quelle

Antworten:

1

Ich gehe davon aus, dass der Name der Verzeichnisse auch der Zeitstempel ihrer Erstellung ist. Wenn es so ist, können Sie ls verwenden, um Dateien entsprechend der Änderungszeit der Verzeichnisse aufzulisten.

Dadurch werden die Verzeichnisse in der Reihenfolge der neuesten zuerst aufgelistet

cd /PATH/TO/PARENT-DIRECTORY/
ls -lt 

So löschen Sie alle Verzeichnisse mit Ausnahme der neuesten 2 Dateien: -

cd /PATH/TO/PARENT-DIRECTORY/
ls -lt | tail -n +4 | awk '{print $9}' | xargs rm -r

Hinweis: Versuchen Sie es zunächst in einer Testumgebung und überprüfen Sie gründlich, ob dies genau das ist, was Sie ausführen möchten, auch wenn dieses Skript mit Ihren Verzeichnissen funktioniert.

Anfänger
quelle
Vielen Dank. Ich habe es so gemacht, ls -lt | grep "DATA-backup- *" tail -n +3 | awk '{print $ 9}' | xargs rm -r. Weil mein Verzeichnis auch andere Verzeichnisse wie Temp, Abidf usw. Hat. Also habe ich das gewünschte Verzeichnis gefunden und jetzt funktioniert es einwandfrei. Wenn ich jedoch die gleiche Anweisung in mein Skript einfüge, erhalte ich die Fehlermeldung: rm: fehlender Operand. Irgendeine Idee, warum es sich so verhält?
Mahesh
Nishita Patwardhan Ich habe dasselbe in einem Skript ausprobiert, es funktioniert gut. Ich denke also, dass Ihr Skript etwas enthält, in das Sie eingearbeitet haben.
Anfänger