Utwórz katalog o nazwie 0001 zamiast 1 w pętli skryptu bash

10

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!

Marcello
źródło

Odpowiedzi:

13

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żytkownik98085
źródło
5

Używając bash, najlepszą opcją jest:

mkdir {0001..0666}

tworzyć katalogi o nazwie 0001do 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 bashpodrę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
gniourf_gniourf
źródło
Jest to użyteczne tylko w przypadku tworzenia znanej wcześniej liczby katalogów. Zwykle, używając numerowanych katalogów, znajdujesz się w kontekście dynamicznym - co oznacza, że ​​powinien on określać ilość w czasie wykonywania, a zatem nadal wymaga dopełniania łańcucha. Zależy jednak od konkretnego przypadku użycia.
user98085,
@FEichinger Right! post odpowiednio zmodyfikowany.
gniourf_gniourf