다음과 같이 이미지로 가득 찬 디렉토리의 이름을 바꾸려고 합니다.
test.jpg
funny.gif
sad.png
파일명.PNG
파일 naaskjas.JPG
도착하다:
1.jpg
2.gif
3.png
4.png
5.jpg
대문자-> 소문자 변환을 제외하고는 작동합니다.
i=1;
shopt -s nullglob;
for f in *.jpg *.gif *.png *.jpeg *.JPG *.JPEG *.GIF; do
mv -- "$f" "$i.${f##*.}";
((i++));
done
나도 jpeg
되고 싶다 jpg
.
답변1
다음과 같은 것을 시도해보세요
ext=$( echo "$i.${f##*.}" | tr [AZ] [az] ) mv --“$f”$i$ext
또는 고정 길이 파일 이름.
dest=$(printf '08d%' $9)$( echo "$i.${f##*.}" | tr [AZ] [az] ) mv --“$f”$dest
씨
답변2
검색/바꾸기를 사용할 수 있을 ${parameter/pattern/string}
뿐만 아니라 ${parameter,,pattern}
소문자로 변환할 수도 있습니다.
i=1;
shopt -s nullglob;
for f in *.jpg *.gif *.png *.jpeg *.JPG *.JPEG *.GIF; do
EXT="${f##*.}"
EXT=${EXT,,}
EXT=${EXT/jpeg/jpg}
mv -- "$f" "$i.${EXT}";
((i++));
done
답변3
두 단계:
확장 프로그램 변환:
for file in *.GIF; do mv $file ${file%GIF}gif; done
for file in *.jpeg; do mv $file ${file%jpeg}jpg; done
...
파일 수:
for file in *.gif *.jpg ...; do mv $file $i$file; ((i++)); done
답변4
(p)이름 바꾸기가 있는 경우 다음과 같이 작성할 수 있습니다.
shopt -s nullglob;
i=1;
for f in *.{jpg,JPG,jpeg,JPEG,png,PNG,gif,GIF}; do
rename 's/.*\.(.*)$/'$((i++))'.\L$1/; s/jpeg$/jpg/' "$f";
done