使用bash更改文件扩展名的问题

时间:2013-12-07 22:15:23

标签: bash shell

find /path/to/files -type f -not -name "M*'.jpg" -exec mv "{}" "{}".mxg \;

我担心我犯了两个错误。

文件存储在目录结构中。目标是保留文件名并将文件扩展名从.jpg更改为.mxg。但仅适用于将'M'作为文件名的第一个字符的文件。

以上一行有这样的结果:

  • 所有文件都添加了.mxg。所以.jpg不是,所有文件都被更改。

1 个答案:

答案 0 :(得分:0)

这应该这样做:

find /path/to/files -type f -name 'M*.jpg' -exec bash -c 'echo mv "$1" "${1/jpg/mxg}"' -- {} \;

如果您拥有rename命令,则更简洁的解决方案。但是,有不同的实现,所以首先阅读您的man页面,检查您是否与我的相同。我在Debian中的版本是Larry Wall在perl中的实现。您可以通过靠近顶部的示例rename 's/\.bak$//' *.bak或靠近底部的 AUTHOR 部分来识别这一点。通过此实现,您可以像这样重命名文件:

find /path/to/files -type f -name 'M*.jpg' -exec rename 's/jpg$/mxg/' {} \;