Find

linux下重命名文件和目錄

  • January 21, 2011

為什麼下面的命令“find / -name ’ node1 ’ -print0 | xargs -0 rename ’s/node1/node_STAR/’ ”不能替換/var/tmp目錄下的node1?

我的目標是掃描 linux sys 並重命名目錄和文件

來自我的 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

標準的 linuxrename命令手冊頁說:

rename 將通過將名稱中第一次出現的from替換為**to 來重命名指定的文件。

所以它只是用於簡單的文件重命名。這是 util-linux 的標準重命名,在我知道的所有 linux 系統上都可用。

我認為您可能正在嘗試使用 Larry Wall 的範例 perl rename script。如果這是您真正想要的,請在您的路徑中創建此文件:

#!/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,並呼叫它而不是系統重命名。我用您的範例對其進行了測試,並且可以正常工作。

引用自:https://serverfault.com/questions/225027