我有一堆图像想要重命名如下:
*.png.png --> *.png
*.jpeg.jpg --> *.jpg
*.JPEG --> *.jpg
到目前为止我唯一尝试过的是mv *.png.png *.png
,但我知道这行不通,但还是冒险了。
是否有一种简单(或可能没有)的方法可以使用此模式批量重命名文件?
答案1
这是针对您问题中的三种情况的仅 shell 解决方案:
for f in *.png.png ; do mv -i "${f}" "${f%.png}" ; done
for f in *.jpeg.jpg ; do mv -i "${f}" "${f%.jpeg.jpg}.jpg" ; done
for f in *.JPEG ; do mv -i "${f}" "${f%.JPEG}.jpg" ; done
在要重命名文件的目录中键入它。
如果您想以替换后缀脚本的形式概括此类解决方案,您可以执行以下操作:
#!/bin/sh
from=${1:?} to=${2:?}
for f in *${from} ; do mv -i "${f}" "${f%${from}}${to}" ; done
并使用两个参数调用该脚本,即要替换的后缀和新后缀。
答案2
这是用于find
重命名的东西*.png.png -> *.png
:
find ./ -name '*.png.png' -type f \
-exec sh -c 'mv {} ./$(basename -s .png.png {}).png' \;
它并不是真正通用的,因此您必须针对其他文件扩展名对其进行自定义。
答案3
使用rename
。专门设计用于处理多个文件。
更短。清洁工。
*.png.png --> *.png
% rename 's/.png.png$/.png/' *.png
*.jpeg.jpg --> *.jpg
% rename 's/.jpeg.jpg$/.png/' *.jpeg.jpg
*.JPEG --> *.jpg
% rename 's/.JPEG$/.jpg/' *.JPEG
更全面的手册:
% man rename