W poniższym skrypcie bash, jeśli j = 0000, jak mam zmienić następujący skrypt bash, aby utworzyć katalog o nazwie 0001, 0002, ...? W rzeczywistości tworzy katalog o nazwach 1, 2, 3
for i in *.jpg; do let j+=1 ; mkdir $j ; done
Dzięki!
Twój aktualny skrypt używa tylko wartości dziesiętnej - to oczywiście przekłada się na wartość bez zer wiodących.
Będziesz musiał uzupełnić ciąg znaków do długości 4 znaków z wiodącymi zerami. Robi ``
się to za pomocą wstecznego, aby uzyskać wynik wywołania printf printf %04d $j
.
W rezultacie powinieneś mieć pełne polecenie:
for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done
Źródło: StackOverflow: bash - Dopełnianie zer w ciągu
(Oczywiście zobacz także dalsze odpowiedzi na to pytanie, jeśli chcesz bardziej dogłębnego rozwiązania, ale to zdecydowanie działa idealnie w tym przypadku użycia).
Używając bash, najlepszą opcją jest:
mkdir {0001..0666}
tworzyć katalogi o nazwie 0001
do 0666
(z zerowym wypełnieniem).
Jeśli chcesz katalogów nazwie prefix0001suffix
, prefix0002suffix
... następnie:
mkdir prefix{0001..0666}suffix
zrobi.
Jeśli chcesz tylko nazwy katalogów nieparzystych
mkdir {0001..0666..2}
i tak dalej ... Patrz Rozszerzenie nawiasów klamrowych w bash
podręczniku użytkownika .
Jak zauważa FEichinger, musisz z góry znać liczbę katalogów. Jeśli potrzebujesz rozwiązania zbliżonego do twojego, ale naprawdę bezpiecznego i korzystającego z bardziej nowoczesnego idiomu bash:
for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done