bash 스크립트 루프에서 1 대신 0001이라는 디렉토리를 만드십시오.


10

j = 0000 인 경우 다음 bash 스크립트에서 0001, 0002, ...라는 dirs를 만들기 위해 다음 bash 스크립트를 어떻게 변경해야합니까? 실제로 그것은 1, 2, 3이라는 이름의 dirs를 만듭니다.

for i in *.jpg; do let j+=1 ; mkdir $j ; done

감사!

답변:


13

현재 스크립트는 십진수 값만 사용합니다. 이것은 분명히 0을 선행하지 않는 값으로 변환합니다.

문자열을 4 자 길이로 채워야하며 앞에 0이 있어야합니다. backticks ``를 사용 하여 printf 호출의 결과를 얻습니다 printf %04d $j.

결과적으로 전체 명령이 있어야합니다.

for i in *.jpg; do let j+=1; mkdir `printf %04d $j`; done

출처 : StackOverflow : bash-문자열에서 패딩 0

(더 자세한 솔루션을 원할 경우 해당 질문에 대한 추가 답변을 볼 수도 있지만이 사용 사례에 완벽하게 작동합니다.)


5

bash를 사용하는 가장 좋은 방법은 다음과 같습니다.

mkdir {0001..0666}

이름 DIRS을 만듭니다 00010666(제로 패딩).

당신이 디렉토리를 원하는 경우 이름 prefix0001suffix, prefix0002suffix... 다음 :

mkdir prefix{0001..0666}suffix

할 것이다.

홀수 디렉토리 이름 만 원하는 경우

mkdir {0001..0666..2}

등 ... 참조 설명서의 브레이스 확장bash 참조하십시오 .

FEichinger가 지적했듯이 디렉토리 수를 미리 알아야합니다. 자신에게 가까운 솔루션을 원하지만 실제로 안전하고 더 현대적인 bash 관용구를 사용하는 경우 :

for i in *.jpg; do ((++j)); mkdir $(printf "%04d" $j) ; done

이것은 이전에 알려진 양의 디렉토리를 작성하는 경우에만 유용합니다. 일반적으로 번호가 매겨진 디렉토리를 사용할 때 동적 컨텍스트 내에 있습니다. 즉, 런타임시 양을 결정해야하므로 여전히 문자열 패딩이 필요합니다. 하지만 특정 사용 사례에 따라 다릅니다.
user98085

@FEichinger 맞아! 그에 따라 게시물이 수정되었습니다.
gniourf_gniourf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.