我猜这是用 bash 脚本最容易做到的,但我不是很有经验。
我想找到名称以“photo”开头的所有文件,从名称的开头删除“photo”,然后在名称的开头添加“color”。我也想递归地在某个目录上执行此操作。
例如,假设我在运行脚本的文件夹的子目录之一中有文件“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}"' _ {} \;
这是我最初给出的命令,Topep 指出它不起作用。
也许那是因为 os x 的find
命令。它实际上适用于 GNU find
。