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



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

我想查找名称以"photo"开头的所有文件,从名称开头删除"照片",然后在名称开头添加"颜色"。 我还想递归地在某个目录上执行此操作。

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

我该怎么做?

感谢您的帮助!

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

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

同样,这是快速而肮脏的方法 - 注意评论中的免责声明。 有关更健壮(但更详细)的方法,请参阅另一个答案。

不假设文件名中包含的空格或有趣的符号,并且单词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配合得很好。

最新更新