为什么以下命令“ find / -name '节点1'-print0 | xargs -0 rename 's/node1/node_STAR/'" 不替换 /var/tmp 目录下的 node1 吗?
我的目标是扫描 Linux 系统并重命名目录和文件
来自我的 Linux 机器的示例
pwd
/var/tmp/Change_host_dir
find / -name '*node1*' -print0 | xargs -0
/var/tmp/Change_host_dir/node1
find / -name '*node1*' -print0 | xargs -0 rename 's/node1/node_STAR/'
ls
node1
答案1
标准 Linuxrename
命令手册页显示:
rename 将通过替换第一次出现的从以他们的名义到。
所以它只是用于简单的文件重命名。这是来自 util-linux 的标准重命名,在我所知的所有 Linux 系统上都可用。
我认为你可能正在尝试使用 Larry Wall 的示例 perl 重命名脚本。如果这确实是您想要的,请在您的路径中创建此文件:
#!/usr/bin/perl
#
# rename script examples from lwall:
# rename 's/\.orig$//' *.orig
# rename 'y/A-Z/a-z/ unless /^Make/' *
# rename '$_ .= ".bad"' *.f
# rename 'print "$_: "; s/foo/bar/ if <stdin> =~ /^y/i' *
$op = shift;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}
使用 使其可执行chmod 755 rename
,然后调用它而不是系统重命名。我用您的示例测试了它,它可以工作。
答案2
尝试
查找/-名称节点1-exec 重命名 blahblah {} \;