Ich habe einen Ordner, der Versionen meiner Anwendung enthält, jedes Mal, wenn ich eine neue Version hochlade, wird ein neuer Unterordner dafür erstellt, der Name des Unterordners ist der aktuelle Zeitstempel, hier ist ein Ausdruck des Hauptordners (ls -l | grep ^ d):
%Vor%Ich suche nach einem Befehl, der die letzten 10 Versionen (Unterordner) belässt und den Rest löscht.
Irgendwelche Gedanken?
Da gehst du hin. (bearbeitet)
ls -dt */ | tail -n +11 | xargs rm -rf
Erst Liste Verzeichnisse, die vor kurzem geändert wurden, nehmen dann alle außer die ersten 10 und senden sie dann an rm -rf
.
Dies setzt voraus, dass dies die einzigen Verzeichnisse sind und keine anderen im Arbeitsverzeichnis vorhanden sind.
ls -dt1
wird normalerweise nur das neueste Verzeichnis drucken, jedoch /*/
nur Verzeichnisse übereinstimmen und ihre vollständigen Pfade drucken die 1
gewährleistet eins
line pro match / listing t
sortiert die Zeit mit dem neuesten an der Spitze.
sed
nimmt die elfte Zeile nach unten und druckt nur die Zeilen, die dann an rm
übergeben werden.
Sie können xargs verwenden, aber zu Testzwecken möchten Sie vielleicht | rm -r
entfernen, um zu sehen, ob die Verzeichnisse zuerst richtig aufgelistet sind.
Erläuterung:
Verwenden Sie awk, um die Dateinamen aus der verbleibenden 'ls -l' Ausgabe zu extrahieren
Entfernen Sie die Dateien
Ihre Verzeichnisnamen sind in chronologischer Reihenfolge sortiert, was dies vereinfacht. 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. Sie möchten also alle bis auf die letzten 10 löschen.
(Während mehr als 10 Verzeichnisse übrig sind, löschen Sie das älteste.)