perl + exec 명령과 perl 한 줄을 결합합니다.

perl + exec 명령과 perl 한 줄을 결합합니다.

다음과 같은 짧은 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 {} +

그러나 이는 가독성에 도움이 되지 않습니다.

관련 정보