繁体   English   中英

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

[英]issue with changing file extensions with bash

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

我担心我犯了两个错误。

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

上一行具有以下结果:

  • 所有文件都添加了.mxg。 因此,.jpg不是,所有文件都已更改。

应该这样做:

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

一个更干净的解决方案是,如果您具有rename命令。 但是,那里有不同的实现,因此请先阅读man页,以检查您与我的man是否相同。 我在Debian中使用的版本是Larry Wall在perl的实现。 您可以通过示例在顶部附近rename 's/\\.bak$//' *.bak或在底部附近rename 's/\\.bak$//' *.bak AUTHOR部分来识别这一点。 通过此实现,您可以像这样重命名文件:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM