次のような短いPerlスクリプトがありますrename.pl
。このスクリプトをライナーPerl構文にどのように変換できますか? Perl onelinerをfind
コマンドに結合する方法は?
rename.pl
#!/usr/bin/perl
$op = shift;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}
私の現在のfind
構文:
find /tmp -name "*$NAME*" -exec \
./rename.pl \
's/\Q$ENV{NAME_THAT_WE_WANT_TO_CHANGE}\E/$1$ENV{NEW_NAME}$2/' {} +
find
私が作りたい構文は次のとおりです。
find /tmp -name "*$NAME*" -exec \
< perl one liner line ....... > \
's/\Q$ENV{NAME_THAT_WE_WANT_TO_CHANGE}\E/$1$ENV{NEW_NAME}$2/' {} +
答え1
次のようにスクリプトの内容をパラメータとして提供します-e
。
find .... -exec perl -e '
$op = shift;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}' s/a/b/g {} +
次のように圧縮できます。
find ... -exec perl -e '$op=shift;for(@ARGV){$was=$_;eval$op;die$@if$@;rename$was,$_ unless$was eq$_}' s/a/b/g {} +
ただし、これは読みやすさには役立ちません。