[bash] 폴더의 파일 이름을 순차 번호로 바꾸기

디렉토리의 파일 이름을 순차적 번호로 바꾸고 싶습니다. 파일 생성 날짜를 기준으로합니다.

예를 들어, sadf.jpg0001.jpg, wrjr3.jpg0002.jpg등등, 파일의 총 금액 (필요하지 않은 경우 추가 제로에 대한 필요)에 따라 선행 0의 수.



답변

루프 letprintf패딩에 사용하십시오.

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

-i플래그를 사용하면 기존 파일을 자동으로 덮어 쓰지 않습니다.


답변

한 줄의 아름다움 :

ls -v | cat -n | while read n f; do mv -n "$f" "$n.ext"; done 

당신은 변경할 수 .ext.png, .jpg


답변

나는 단순성에 대한 gauteh의 솔루션을 좋아하지만 중요한 단점이 있습니다. 수천 개의 파일에서 실행하면 “인수 목록이 너무 깁니다”라는 메시지가 표시되고 ( 더 자세한 내용은이 스크립트에서) 스크립트가 실제로 느려질 수 있습니다. 필자의 경우 약 36.000 파일에서 실행하면 스크립트가 약 이동했습니다. 초당 1 개의 아이템! 왜 이런 일이 발생하는지 잘 모르겠지만 동료로부터 얻은 규칙은 find당신의 친구” 였습니다.

find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

아이템을 세고 명령을 빌드하기 위해 gawk 가 사용되었습니다. 그러나 주요 차이점에 유의하십시오. 기본적 find으로 현재 디렉토리 및 해당 서브 디렉토리에서 파일을 검색하므로 필요한 경우 현재 디렉토리에서만 검색을 제한 man find하십시오 (방법을 보는 데 사용 ).


답변

“이름 바꾸기”명령으로

rename -N 0001 -X 's/.*/$N/' *.jpg

또는

rename -N 0001 's/.*/$N.jpg/' *.jpg


답변

OSX에서 Pero 솔루션을 사용하려면 약간의 수정이 필요했습니다. 나는 사용했다 :

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' \
| bash

참고 : 백 슬래시는 줄 연속을 위해 존재합니다

2015 년 7 월 20 일 수정 : 공백이있는 파일 이름을 지원하기 위해 명령
\"%s\"인수 를 인용하기 위해 @klaustopher의 피드백을 통합했습니다 mv.


답변

원래 확장을 유지하고 선행 0을 추가하며 OSX에서도 작동하는 매우 간단한 bash 하나의 라이너

num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done

http://ubuntuforums.org/showthread.php?t=1355021의 단순화 된 버전


답변

모든 상황에서 작동하려면 이름에 공백이있는 파일에 \ “를 넣으십시오.

find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash