我有以下简短的 perl 脚本rename.pl
。我怎样才能把这个脚本翻译成一个liner 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 {} +
但这无助于可读性。