perl + combina o comando exec com perl one liner line

2

Eu tenho o seguinte script perl rename.pl . Como posso traduzir esse script para uma sintaxe de liner perl? E como combinar o perl one liner no comando find ?

rename.pl

#!/usr/bin/perl

$op = shift;
for (@ARGV) {
  $was = $_;
  eval $op;
  die $@ if $@;
  rename($was,$_) unless $was eq $_;
}

Minha atual sintaxe find :

find /tmp -name "*$NAME*" -exec \
  ./rename.pl \
  's/\Q$ENV{NAME_THAT_WE_WANT_TO_CHANGE}\E/$1$ENV{NEW_NAME}$2/' {} +

A sintaxe find que desejo criar:

find /tmp -name "*$NAME*" -exec \
  < perl one liner line ....... > \
  's/\Q$ENV{NAME_THAT_WE_WANT_TO_CHANGE}\E/$1$ENV{NEW_NAME}$2/' {} +
    
por yael 13.03.2013 / 14:09

1 resposta

2

Basta fornecer o conteúdo do script como um argumento após -e :

find .... -exec perl -e '
  $op = shift;
  for (@ARGV) {
    $was = $_;
    eval $op;
    die $@ if $@;
    rename($was,$_) unless $was eq $_;
  }' s/a/b/g {} +

Você pode condensá-lo para:

find ... -exec perl -e '$op=shift;for(@ARGV){$was=$_;eval$op;die$@if$@;rename$was,$_ unless$was eq$_}' s/a/b/g {} +

Mas isso não ajuda a legibilidade.

    
por 13.03.2013 / 14:22