find /path/to/files -type f -not -name "M*'.jpg" -exec mv "{}" "{}".mxg \;
我担心我犯了两个错误。
文件存储在目录结构中。目标是保留文件名并将文件扩展名从.jpg更改为.mxg。但仅适用于将'M'作为文件名的第一个字符的文件。
以上一行有这样的结果:
答案 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/' {} \;