单行Perl命令重命名文件

jda*_*mae 5 perl

到目前为止,这个单线程正在剥离一行并重命名文件,但我需要帮助来改变它,以便它剥离我正在寻找的那条线Data for并删除旧的文件扩展名.csv而不是添加它.(.csv.out).我不确定这是否可以通过单行完成.

相反,它正在添加扩展名 filename.csv.out

例

 test_20110824.csv.out
Run Code Online (Sandbox Code Playgroud)

一内胆:

find -type f -name '*.csv' -exec perl -i.out -wlne '/^Data for/ or print' {} \;
Run Code Online (Sandbox Code Playgroud)

我想替换扩展名:

test_20110824.out
Run Code Online (Sandbox Code Playgroud)

TLP*_*TLP 4

perl -MFile::Copy -we 'for (glob "*.csv") { my ($name) = /^(.+).csv/i; move($_, $name . ".out"); }'
Run Code Online (Sandbox Code Playgroud)

要删除标头匹配Data for:

perl  -MFile::Copy -MTie::File -wE 'for (glob '*x.csv') { tie my @file,
"Tie::File", $_ or die $!; shift @file if $file[0] =~ /^Data for/; 
untie @file; my ($name) = /^(.*).csv/i; move($_, $name . ".out"); }'
Run Code Online (Sandbox Code Playgroud)

但后来它真的不再是一句台词了......

use strict;
use warnings;
use Tie::File;
use File::Copy;
use autodie;

for (@ARGV) {
    tie my @file, "Tie::File", $_;
    shift @file if $file[0] =~ /^Data for/;
    untie @file; 
    my ($name) = /^(.*).csv/i; 
    move($_, $name . ".out");
}
Run Code Online (Sandbox Code Playgroud)

并与以下一起使用:

$ script.pl *.csv
Run Code Online (Sandbox Code Playgroud)