다음과 같은 짧은 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 {} +
그러나 이는 가독성에 도움이 되지 않습니다.