Linux

perl + 將 exec 命令與 perl 單行組合

  • March 14, 2013

我有以下簡短的 perl 腳本rename.pl。如何將此腳本轉換為一種襯裡 perl 語法?以及如何在find命令中結合 perl 一個班輪?

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/' {} +

只需將腳本的內容作為參數提供如下-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 {} +

但這無助於易讀性。

引用自:https://unix.stackexchange.com/questions/67774