如何使用sed,perl在给定的目录中用特定的模式重命名文件及其内容?

给定一个名为Centos1.x,Centos1.y,Centos1.z的文件夹“Centos1”,这些文件的内容也是“Centos1”。 使用单个命令(使用findsedperl -pie)如何将它们重命名为“Centos2”以便发生所有“Centos1”以下是Centos1目录的内容。

Centos1.nvram Centos1-s005.vmdk Centos1.vmsd vmware-2.log Centos1-s001.vmdk Centos1-s006.vmdk Centos1.vmx vmware.log Centos1-s002.vmdk Centos1-s007.vmdk Centos1.vmxf Centos1-s003.vmdk Centos1-s008.vmdk vmware-0.log Centos1-s004.vmdk Centos1.vmdk vmware-1.log 

注意:如果存在所有文件,我想要将“Centos1”replace为“Centos2”。

在更改为“Centos1”目录后,我运行了下面提到的命令

 find . -type f -exec sed -i 's/Centos1/Centos2/g' {} + 

但是没有帮助。 任何input?

您可以使用重命名命令来进行重命名

 rename Centos1 Centos2 * 

或者如果你有perl重命名

 rename 's/Centos1/Centos2' * 

你的find命令应该把所有的Centos1改成Centos2,这样你可以把它们包装在一个简单的脚本中,使它成为一个命令。

 #!/bin/bash rename Centos1 Centos2 * find . -type f -exec sed -i 's/Centos1/Centos2/g' {} + 

你的答案是否真的需要只包含这些命令,或者你可以使用bash builtins和file globbing?

 for file in Centos1*; do sed -i 's/Centos1/Centos2/g' "$file" mv "$file" "$(echo "$file" | sed 's/^Centos1/Centos2/')" done 

编辑:只使用查找/ sed,并重命名内部文件

 find ./ -type f -name Centos1* -exec sh -c 'sed -i "s/Centos1/Centos2/g" "$1"; mv "$1" "$(echo "$1" | sed "s/Centos1/Centos2/")"' X '{}' \;