如何使用perl重命名带有链接目录名的文件?

时间:2017-03-02 07:24:56

标签: perl

我喜欢用perl重命名我的文件目录名。我的目录结构如下:

    |-- Basket
    |   |-- ICC
    |   |   |-- rest10-rest10-rest10-test.txt
    |   |   `-- rest1
    |   |       `-- rest1-rest1-rest1-rest.txt
    |   |-- bl2-bl2-bl2-b1.txt

预期:

    |-- Basket
    |   |-- ICC
    |   |   |-- ICC_rest10.txt
    |   |   `-- rest1
    |   |       `-- ICC_rest1.txt
    |   |-- Basket_bl2.txt

我的代码:(我尝试了所有的.txt文件)

#!/usr/bin/perl
use strict;
use warnings;
my $dir = '/home/user1/output';
my @files = glob "${dir}*.txt*";
foreach (@files) {
    next if -d;
    my $o_name = $_;
    rename $o_name, $_  or
        $_ = $o_name,
        print $_;
}

1 个答案:

答案 0 :(得分:0)

#!/usr/bin/perl
use strict;
use warnings;
sub runDir($$);
sub runDir($$) {
    my $prefix = shift @_;
    my $dir = shift @_;
    opendir(DIR, $dir) or die $!;
    my @entries = readdir(DIR);
    close(DIR);
    foreach my $file (@entries) {
        next if ($file =~ /^\.+$/);
        if ( -d $dir . '/' . $file) {
            runDir($prefix . $file . '_', $dir . '/' . $file);
        } elsif ( ( -f $dir . '/' . $file ) && ( $file =~ /\.txt$/ ) ) {
            my $suffix = $file;
            $suffix =~ s/^(\S+)-.+\.txt$/$1.txt/;
            print "rename $dir . '/' . $file, $dir . '/' . $prefix . $suffix . \n";
        }
    }
}
runDir('output_', '/home/user1/output');

但要注意文件名冲突:

rest1-rest1-rest.txt
rest1-rest1-rest1-rest.txt

在同一个目录......