perl + 将 exec 命令与 perl 一行结合起来

perl + 将 exec 命令与 perl 一行结合起来

我有以下简短的 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 {} +

但这无助于可读性。

相关内容