ファイル/ディレクトリの名前を変更するperlワンライナーコードがあります
コード:
find /tmp -name "*$NAME_THAT_WE_WANT_TO_CHANGE*" -exec /tmp/rename.pl 's/\Q$ENV{NAME_THAT_WE_WANT_TO_CHANGE}\E/$1$ENV{NEW_NAME}$2/' {} +
どのファイル/ディレクトリが変更されるかを印刷するために、印刷メッセージ(警告)をコードに追加したい
だから私は行を追加します:
&& warn "Rename file - [$ENV{$NAME_THAT_WE_WANT_TO_CHANGE}"'
したがって、最終的に更新コードは次のようになります。
find /tmp -name "*$NAME_THAT_WE_WANT_TO_CHANGE*" -exec /tmp/rename.pl 's/\Q$ENV{NAME_THAT_WE_WANT_TO_CHANGE}\E/$1$ENV{NEW_NAME}$2/ {} + && warn "Rename file - [$ENV{$NAME_THAT_WE_WANT_TO_CHANGE}"'
perl one liner を実行すると、次のエラー メッセージが表示されます。
find: missing argument to `-exec'
私のコードで何を修正/更新する必要があるかアドバイスしてください。
. . . . .
完全な例 (警告「..........」を追加する前)
cd /tmp
touch orig-name
touch new-name
export NAME_THAT_WE_WANT_TO_CHANGE=orig-name
export NEW_NAME=new-name
find /tmp -name "*$NAME_THAT_WE_WANT_TO_CHANGE*" -exec /tmp/rename.pl 's/\Q$ENV{NAME_THAT_WE_WANT_TO_CHANGE}\E/$1$ENV{NEW_NAME}$2/' {} +
ls | grep new-name
new-name
more /tmp/rename.pl
#!/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 $_;