Linux - Speichern nur die letzten 10 Ordner und löschen Sie den rest
Ich habe einen Ordner mit Versionen von meiner Anwendung, jedes mal, wenn ich eine neue version hochladen einer neuen sub-Ordner für Sie erstellt wird, die sub-Ordner-Namen, den aktuellen timestamp, hier ist ein Ausdruck der Haupt-Ordner verwendet (ls -l |grep ^d):
drwxrwxr-x 7 root root 4096 2011-03-31 16:18 20110331161649
drwxrwxr-x 7 root root 4096 2011-03-31 16:21 20110331161914
drwxrwxr-x 7 root root 4096 2011-03-31 16:53 20110331165035
drwxrwxr-x 7 root root 4096 2011-03-31 16:59 20110331165712
drwxrwxr-x 7 root root 4096 2011-04-03 20:18 20110403201607
drwxrwxr-x 7 root root 4096 2011-04-03 20:38 20110403203613
drwxrwxr-x 7 root root 4096 2011-04-04 14:39 20110405143725
drwxrwxr-x 7 root root 4096 2011-04-06 15:24 20110406151805
drwxrwxr-x 7 root root 4096 2011-04-06 15:36 20110406153157
drwxrwxr-x 7 root root 4096 2011-04-06 16:02 20110406155913
drwxrwxr-x 7 root root 4096 2011-04-10 21:10 20110410210928
drwxrwxr-x 7 root root 4096 2011-04-10 21:50 20110410214939
drwxrwxr-x 7 root root 4096 2011-04-10 22:15 20110410221414
drwxrwxr-x 7 root root 4096 2011-04-11 22:19 20110411221810
drwxrwxr-x 7 root root 4096 2011-05-01 21:30 20110501212953
drwxrwxr-x 7 root root 4096 2011-05-01 23:02 20110501230121
drwxrwxr-x 7 root root 4096 2011-05-03 21:57 20110503215252
drwxrwxr-x 7 root root 4096 2011-05-06 16:17 20110506161546
drwxrwxr-x 7 root root 4096 2011-05-11 10:00 20110511095709
drwxrwxr-x 7 root root 4096 2011-05-11 10:13 20110511100938
drwxrwxr-x 7 root root 4096 2011-05-12 14:34 20110512143143
drwxrwxr-x 7 root root 4096 2011-05-13 22:13 20110513220824
drwxrwxr-x 7 root root 4096 2011-05-14 22:26 20110514222548
drwxrwxr-x 7 root root 4096 2011-05-14 23:03 20110514230258
Ich bin auf der Suche nach einem Befehl, lassen Sie die letzten 10 Versionen (sub-Ordner) und löscht den rest.
Irgendwelche Gedanken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dort gehen Sie. (bearbeitet)
ls -dt */| tail -n +11 | xargs rm -rf
Erste Liste der Verzeichnisse, die vor kurzem geändert, dann nehmen alle von Ihnen mit Ausnahme der ersten 10, dann senden Sie
rm -rf
.ls -dt
immer nur Ausgänge.
. Zweitens, wenn Sie richtig, dass zuls -t
, löschen Sie die 10 neuesten Dateien, die genau das Gegenteil von dem, was gefragt wurde. Drittens, wenn es andere Dateien als Verzeichnisse betrachtet, wird das Skript gerne löschen random stuff. Viertens, wenn es "seltsame" Dateinamen, wird das Skript könnte etwas tun, weil Sie sind Parsen der Ausgabe vonls
, keine gute Idee, und Sie sind vorbei unvorbereitet Eingang zumxargs
.ls -d
schneller sein wird. (wenn im Vergleich zu anderen Lösungen). Undtail +10
löschen 10th aufnehmen, auch. dahertail +11
ist besser.tail
Versionen unterschiedlich sind. Ich bin auf Mac, warten Sie, ich werde prüfen, auf Linux.tail -n +11
(tail +11
ist eine veraltete form). Aber wie Sie vielleicht erraten, ich weiß nicht empfehlen diese, siehe mein Kommentar oben bezüglich der Verwendung vonls
undxargs
.tail -n +11
*/
entspricht nur Verzeichnisse, keine anderen Dateien.ls -dr */ | tail +11 | xargs rm -rf
diese davon ausgegangen sind das die einzigen Verzeichnisse und keine andere vorhanden sind, in das Arbeitsverzeichnis.
ls -dt1
werden in der Regel nur drucken Sie die neuesten directory jedoch die/*/
wirdnur für den Abgleich von Verzeichnissen und drucken Ihre vollständigen Pfade der
1
sorgt für einenLinie pro Spiel/Aufstellung
t
möglichen Zeit, mit dem neuesten an der Spitze.sed
nimmt der 11ten Linie nach unten und druckt nur die Zeilen, die dann anrm
.Können Sie xargs, aber zum testen können Sie entfernen möchten
| rm -r
um zu sehen, ob die Verzeichnisse aufgeführt sind, richtig erste.Wenn die Verzeichnisse, die die Namen enthalten, die das Datum kann man löschen alle, aber die letzten 10 Verzeichnisse mit den Standard-alphabetische Sortierung
Erklärung:
awk verwenden, extrahieren Sie die Datei-Namen aus dem übrigen 'ls -l' output
entfernen Sie die Dateien
EDIT:
ls
, keine gute Idee, und Sie sind vorbei unvorbereitet Eingang zumxargs
. Ihregrep ^d
ist nicht das tun, was Sie denken, es zu tun — wenn Siels -l
würden Sie brauchen, zu extrahieren, Datei-Namen (keine gute Idee), aber da Sie nicht, es ist keine directory-Anzeige.Ihre Verzeichnis-Namen sind in chronologischer Reihenfolge sortiert, das macht das leicht. Die Liste der Verzeichnisse, in chronologischer Reihenfolge ist nur
*
oder[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
um genauer zu sein. So dass Sie wollen, löschen alle, aber die letzten 10 von Ihnen.(Zwar gibt es mehr als 10 Verzeichnisse, Links, löschen Sie die älteste.)