我猜这是使用 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
配合得很好。