为所有文件添加.jpg扩展名


8

我有一个目录,某些文件的扩展名是大写(.JPG)而不是小写。

我想确保每个文件都有.jpg作为扩展名。我将如何从shell提示中执行此操作?


令人遗憾的是,Linux没有AppleScript。
gadgetmo,2012年

2
太好了,Linux没有AppleScript。
数学

Answers:


15

使用Shell参数扩展

for f in *.JPG; do
    mv "${f}" "${f%%.JPG}.jpg"
done

"字符会照顾包含空格的文件名,如照片经常做。


5
+1即使文件名中有空格,此解决方案仍然有效,但是您的意思是“ $ f”而不是“ f”。
亚当·扎尔克曼

Shell Parameter Expansion有点神秘,可以改用基名:* .JPG中的f;做mv“ $ f”“`basename $ f .JPG`.jpg”; 完成
数学

@math:我更喜欢我的版本,因为它可以与包含空格的文件名一起使用,也可以与一起使用/path/to/*.JPG。欢迎您提交自己的答案,当然:)
Johnsyweb

当然,基名将除去前导目录,但将在文件名中使用空格。(我认为这不值一个答案;)因此我将其发布为评论)
数学

10

如果可以使用外部工具(不仅是bash),请检查rename命令!

rename .JPG .jpg *

rename是的一部分util-linux


重命名是有问题的。随带的重命名版本perl可以接受不同的参数来执行相同的操作。
cha0site 2012年

您能再解释一下吗?哪个版本的BTW?
数学

3

如果文件名中确实有空格:

for f in *.JPG; do [[ -f "${f}" ]] && mv "${f}" "${f/%JPG/jpg}"; done


0

如果文件名中没有空格:

for f in *.JPG; do mv $f `echo $f | sed 's/JPG$/jpg/'`; done

1
使它对于名称中带有空格的文件很容易做到:只需在的两个参数周围加上双引号mv
亚当·扎尔克曼

我没有空格。我要添加些什么以使它在CURRENT目录中发生。目前,我出现错误-mv:无法统计“ * .JPG”:没有此类文件或目录
Mark Flint 2012年

1
您那里没有任何JPG。
Karoly Horvath'2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.