我猜这是最容易用bash脚本做的,但我不是很有经验。
我想查找名称以“photo”开头的所有文件,从名称的开头删除“photo”,然后在名称的开头添加“color”。我也希望以递归方式在某个目录上执行此操作。
例如,假设我在运行脚本的文件夹的一个子目录中有文件“photo_extra_text.png”。运行脚本后,该文件应命名为“color_extra_text.png”
我该怎么做?
感谢您的帮助!
答案 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
。