我正在尝试重命名一个充满图像的目录,如下所示:
test.jpg
搞笑.gif
悲伤.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
C
答案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)rename,你可以这样写:
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