почему следующая команда "find / -name"узел1'-print0 | xargs -0 переименовать 's / node1 / node_STAR /' "не заменять node1 в каталоге / var / tmp?
моя цель - сканировать 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
Стандартный linux rename
страница руководства команды говорит:
rename переименует указанные файлы, заменив первое вхождение из от их имени к.
так что это просто для простого переименования файлов. Это стандартное переименование из util-linux, доступное во всех известных мне Linux-системах.
Я думаю, вы, вероятно, пытаетесь использовать Ларри Уолла пример скрипта переименования 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
, и вызовите его вместо переименования системы. Я протестировал это на вашем примере, и он работает.
попробуйте с
найти / -имя узел1 -exec переименовать blahblah {} \;