尝试在shell CLI中将.JPG重命名为.jpg

时间:2014-06-11 07:42:35

标签: linux shell rename command-line-interface batch-rename

我正在尝试将目录中的所有文件重命名为.JPG分机到.jpg,但它无效。

我环顾网络并找到了一些东西,但我似乎无法工作。我尝试的最新版本是:

rename -n .JPG .jpg *.JPG

我使用-n标志来查看将被修改的内容但我没有响应(没有文件)。

我在这里做错了什么!?

2 个答案:

答案 0 :(得分:3)

正确的perl rename需要一个正则表达式,以便您实现这一目标:

$ rename 's#\.JPG$#.jpg#' *.JPG

糟糕的util-linux rename版本的-n没有$ rename .JPG .jpg *.JPG 开关,所以您必须这样做:

man

请参阅{{1}}页面,了解系统上实际安装的实施方案。

答案 1 :(得分:2)

如果你不想使用重命名,你提到你已经尝试了各种各样的东西,然后只使用内置的bash工具,你可以这样做。

for x in `find . -maxdepth 1 -type f -name "*.JPG"` ; do mv "$x" `echo $x|sed 's/JPG/jpg/g'`; done

查找的反引号运行表达式并将结果赋给变量x。如果您需要比当前目录中的所有JPG更复杂的搜索,则可以使用各种开关来查找以限制时间,大小等。 Maxdepth 1将搜索限制为当前目录。

修改

正如Adrian所指出的那样,使用sed是不必要的,浪费,因为它使用另一个子shell,所以相反,这可以全部压缩为:

 for x in `find . -maxdepth 1 -type f -name "*.JPG"` ; do mv "$x" "${x%.JPG}.jpg"; done