Antworten:
Ihr aktuelles Skript verwendet nur einen Dezimalwert - dies wird offensichtlich in den Wert ohne führende Nullen übersetzt.
Sie müssten die Zeichenfolge auf die Länge von 4 Zeichen mit führenden Nullen auffüllen. Verwenden Sie dazu Backticks ``
, um das Ergebnis des printf-Aufrufs abzurufen printf %04d $j
.
Daher sollten Sie den vollständigen Befehl haben:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Quelle: StackOverflow: bash - Auffüllen von Nullen in einer Zeichenfolge
(Natürlich finden Sie auch die weiteren Antworten auf diese Frage, wenn Sie eine eingehendere Lösung wünschen, aber dies funktioniert definitiv perfekt für diesen Anwendungsfall.)
Mit bash ist Ihre beste Option:
mkdir {0001..0666}
um dirs mit name 0001
to zu erstellen 0666
(mit null auffüllung).
Wenn Sie möchten , Verzeichnisse genannt prefix0001suffix
, prefix0002suffix
... dann:
mkdir prefix{0001..0666}suffix
Wird besorgt.
Wenn Sie nur Verzeichnisnamen mit ungeraden Nummern möchten
mkdir {0001..0666..2}
und so weiter ... Siehe Klammererweiterung im bash
Referenzhandbuch .
Wie FEichinger betont, müssen Sie die Anzahl der Verzeichnisse im Voraus kennen. Wenn Sie eine Lösung suchen, die Ihrer nahe kommt, aber wirklich sicher ist und eine modernere Bash-Sprache verwendet:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done