디렉토리의 파일 이름을 순차적 번호로 바꾸고 싶습니다. 파일 생성 날짜를 기준으로합니다.
예를 들어, sadf.jpg
에 0001.jpg
, wrjr3.jpg
에 0002.jpg
등등, 파일의 총 금액 (필요하지 않은 경우 추가 제로에 대한 필요)에 따라 선행 0의 수.
답변
루프 let
및 printf
패딩에 사용하십시오.
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
