Ich möchte ein Verzeichnis mit einer Nummer am Ende erstellen, z. "dir1", und erhöhen Sie diese Zahl, wenn das Verzeichnis bereits vorhanden ist, bis es auf einen nicht vorhandenen Verzeichnisnamen stößt. Dies muss in einer einzelnen Zeile in einer Linux-Befehlszeile erfolgen.
mkdir --increment dir$
Wie würde ich das machen?
Bisher habe ich folgendes:
dir=output; n=0; mkdir -p $dir$n; if test -d $dir$n; then n=$((n+1)); echo $dir$n; fi
Aber es gibt nur den Namen des nächsten Verzeichnisses wieder. Ich brauche ihn, um den Befehl rekursiv auszuführen.
quelle
Wenn Sie nur inkrementell Verzeichnisse erstellen möchten, die in der richtigen Reihenfolge aufgeführt sind, kann ich stattdessen Ordner empfehlen, deren Namen auf dem aktuellen Datum basieren?
Es werden Verzeichnisse mit den Namen wie erstellt
dir-2014-03-02
(YYYY-MM-DD
, um in alphabetischer Reihenfolge angezeigt zu werden).Wenn Sie mehr als ein Verzeichnis pro Tag erstellen, können Sie die aktuelle Uhrzeit zum Dateinamen hinzufügen. Sehen
man date
zum Optimieren der Ausgabeformatierung vondate
.quelle
Finden Sie zuerst den "größten" Verzeichnisnamen, ermitteln Sie die Nummer und erhöhen Sie diese:
quelle
printf
Hier? Wird nicht einfachecho
Arbeit?dir[0-9]*
anstattdir*
.Angenommen, Ihre Verzeichnisse beginnen immer mit "dir1", und es gibt keine Dateien mit dem Namen $ dir * (d. H. Alle Verzeichnisse sind fortlaufend nummeriert).
Dies zählt die Anzahl der Dateien, die mit $ dir beginnen, addiert dann eine zu dieser Anzahl und erstellt eine neue Datei.
quelle
Nachtrag zu den anderen Antworten: Wenn Sie möchten, dass die Verzeichnisse korrekt nach Namen sortiert werden, können Sie die neue Verzeichnisnummer (NUM) auch mit führenden Nullen auf eine feste Länge setzen.
Das Folgende könnte auf einer Leitung zusammengefasst oder in eine der anderen Lösungen eingebettet sein.
Dies setzt voraus, dass NUM mindestens eine Ziffer lang beginnt und die feste Länge nicht überschreitet. Passen Sie entsprechend Ihren Anforderungen an.
quelle