2011-01-21 28 views
-1

繼續我剛纔的問題(但其他queastion),編perl的俏皮話,並結合到其他線路

根據下面的perl腳本(rename.pl)

如何建立perl單行命令行從rename.pl腳本 爲了替換:/var/tmp/rename.pl(來自find命令...) 與單行程序perl語法?

(我不想使用rename.pl腳本)

find/-name "$OLD_HOST" -print0 | xargs -0 /var/tmp/rename.pl 'print "changing $_\n"; s/$OLD_HOST/host_10/g' 

rename.pl腳本:

#!/usr/bin/perl 

    $op = shift; 
    for (@ARGV) { 
     $was = $_; 
     eval $op; 
     die [email protected] if [email protected]; 
     rename($was,$_) unless $was eq $_; 
    } 
+1

我每天都使用重命名腳本的[full-size version](http://training.perl.com/scripts/rename)。爲什麼在這個世界上你會不會使用現有的代碼? – tchrist 2011-01-21 13:48:09

回答

0

爲什麼不使用子彈校對,調試rename.pl腳本?

find ... | 
xargs -0 perl -e 'my $op - shift; foreach (@ARGV) 
        { my $was = $_; eval $op; die [email protected] if [email protected]; 
        rename($was, $_) unless $was eq $_; }' \ 
       s/x/y/g 
0

這一行代碼將在文件名中找到帶有數字的zip文件,並打印一些「mv」shell命令而不是立即執行它們。您可以將其粘貼到命令行中以便稍後進行更多控制。 也許這會讓你開始。

找到。 -name「* .zip」| perl -nE 'chomp;我的$ f = qq($ _); $ f =〜/(\ d +)/; 說「mv $ f」。 sprintf(「%03d」,$ 1)。 「。壓縮」;'