查找具有特定前缀的文件并替换前缀?

时间:2013-11-09 17:47:48

标签: macos bash shell

我猜这是最容易用bash脚本做的,但我不是很有经验。

我想查找名称以“photo”开头的所有文件,从名称的开头删除“photo”,然后在名称的开头添加“color”。我也希望以递归方式在某个目录上执行此操作。

例如,假设我在运行脚本的文件夹的一个子目录中有文件“photo_extra_text.png”。运行脚本后,该文件应命名为“color_extra_text.png”

我该怎么做?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

简单的方法,如果所有路径名都没有空格或者目录名以photo开头:

for i in `find . -name 'photo*' -type f` ; do mv ${i} ${i/\/photo//color} ; done

同样,这是快速而肮脏的方法 - 请注意免责声明。对于更强大(但更详细)的方法,请参阅另一个答案。

答案 1 :(得分:1)

不假设文件名中包含任何空格或有趣符号,并且单词photo没有出现在子文件夹中:

find /path/to/photo_folder -name 'photo*.png' -exec bash -c 'echo mv "$1" "${1%/*}/color${1##*/photo}"' _ {} \;

当然,如果您对命令感到满意,请删除echo


另一种(更简单)的可能性:

find /path/to/photo_folder -name 'photo*.png' -execdir bash -c 'echo mv "$1" "color${1#*/photo}"' _ {} \;

这是我最初给出的命令,而Tophep指出它不起作用。

也许那是因为os x的find命令。它实际上适用于GNU find