在目录的所有文件名中查找并replace另一个单词

我试图在我的目录(和所有子目录)的所有文件名中用“user”replace“owner”一词。

防爆。

owners_controller => users_controller owner.rb => user.rb 

任何帮助,将不胜感激

使用带有-exec选项的find命令,在名称中包含“ owner ”的每个文件和子目录中调用rename

 find path/to/my/directory/ -depth -name "*owner*" -exec /usr/bin/rename owner user {} \+ 

如果您没有rename ,则可以使用带有bash参数扩展的mv命令:

 find path/to/my/directory/ -depth -name "*owner*" -exec \ bash -c 'mv "{}" $(old="{}"; new="${old##*/}"; echo "${old%/*}/${new/owner/user}")' \; 

bash -c '...'在由单引号括起来的单行程上调用bash shell。 单线程作为mv命令,将匹配的文件名/子目录的基本名称中的“ 所有者 ”的所有出现重命名为“ 用户 ”。

具体来说,在-exec后面的每个{} find与匹配的文件/子目录路径名相同的替换项。 这里mv接受两个参数; 第一个是{} (前面描述过),第二个是从包含三个bash命令的子shell $(...)返回的字符串。 这些bash命令使用参数扩展技术来重命名{}的基本名称。

如果你没有安装rename ,这应该是一个合理的选择(假设bash作为你的shell):

 while read entry do mv "${entry}" "${entry/owner/user}" done < <(find . -depth -name '*owner*' -print)