使用 find 或 perl 在 linux 中重命名文件和目录

使用 find 或 perl 在 linux 中重命名文件和目录

我需要扫描所有目录和文件以及目录,并重命名主机 - “node1”,文件名或目录名中使用“node_STAR”

有人能有好主意吗,如何使用 find 或 perl 来做到这一点(以便将其插入到我的 shell 脚本中)无论如何,尽管我们扫描了所有 Linux 目录和文件,但它必须非常快

文件示例

     /var/tmp/node1 will be /var/tmp/node_STAR file

示例 - 目录

     /etc/my_hosts/node1  will be /etc/my_hosts/node_STAR dir

答案1

就像是:

rename 's/node1/node_STAR/' `find /var/tmp /etc/my_hosts -name 'node1'`

答案2

由于如果受影响的文件数量很大,通过 find 的反引号调用传递文件名可能会失败,因此最好使用 xargs:

find . -name '*node1*'  -print0 | xargs -0 rename 's/node1/node_STAR/'

node1此命令将替换从当前目录 ( ) 开始的所有包含字符串的文件和目录名称.。如果您只想替换精确的文件名,请从 find 参数中删除星号,并将其限制为文件或目录,请分别使用参数type -ftype -d

相关内容