0

我正在尝试在我的目录(以及所有子目录)的所有文件名中将“所有者”一词替换为“用户”。

前任。

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

任何帮助,将不胜感激

4

2 回答 2

2

find与选项一起使用-exec以调用名称中包含“所有者rename”的每个文件和子目录:

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

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

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所有出现的“所有者”重命名为“用户”。

具体来说,用匹配的文件/子目录的路径名替换之后的find每个。这里接受两个参数;第一个是(如前所述),第二个是从包含三个 bash 命令的子 shell 返回的字符串。这些 bash 命令使用参数扩展技术来重命名.{}-execmv{}$(...){}

于 2013-07-19T19:11:54.297 回答
1

如果您还没有rename安装,这应该是一个合理的选择(假设bash你的外壳):

while read entry
do
  mv "${entry}" "${entry/owner/user}"
done < <(find . -depth -name '*owner*' -print)
于 2013-07-20T12:51:14.547 回答