我喜欢用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 $_;
}
答案 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
在同一个目录......