我需要扫描所有目录和文件以及目录,并重命名主机 - “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 -f
或type -d
。