perl+exec コマンドと perl 1 行を結合します。

perl+exec コマンドと perl 1 行を結合します。

次のような短い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 {} +

ただし、これは読みやすさには役立ちません。

関連情報