在 bash 中使用一个命令查找文件并重命名

在 bash 中使用一个命令查找文件并重命名

如何在 RHEL 7 服务器中找到文件并重命名它?这可以通过一个命令完成吗?

例如,我可以:

find . -name filename 

然后cd到目录 then mv filename.conf filename2.conf,但我想在一行中完成这一切。

答案1

您可以使用该execdir标志。

  find . -type f -name <original_file_name> -execdir mv {} <new_file_name> \;

答案2

如果您想重命名file.conffile2.conf,请使用find以下-exec选项:

find . -name "*.conf" -type f -exec sh -c 'mv "$1" "${1%.conf}2.conf"' sh {} \;

每个文件名都{}作为参数传递$1给一个新的 shell 进程,该进程以执行命令的-exec选项启动。mv

  • ${1%.conf}是 shell 参数扩展并.conf从文件名中删除后缀
  • 2.conf将新后缀添加到文件名中

如果您想在执行命令之前对其进行测试,请echo在其中添加一个,如下所示:

find . -name "*.conf" -type f -exec sh -c 'echo mv "$1" "${1%.conf}2.conf"' sh {} \;

相关内容