如何使用perl重命名带有链接目录名的文件?
我喜欢使用perl用目录名重命名我的文件。我包括了我的目录结构,如下所示:如何使用perl重命名带有链接目录名的文件?,perl,Perl,我喜欢使用perl用目录名重命名我的文件。我包括了我的目录结构,如下所示: |-- Basket | |-- ICC | | |-- rest10-rest10-rest10-test.txt | | `-- rest1 | | `-- rest1-rest1-rest1-rest.txt | |-- bl2-bl2-bl2-b1.txt 预期: |-- Basket | |-- ICC
|-- 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文件)
但要注意文件名冲突:
rest1-rest1-rest.txt
rest1-rest1-rest1-rest.txt
在同一方向…你的问题是什么?您不会对
$o_name
进行任何更改,因此您的重命名将不会更改文件的名称。你也只在一个目录中查找,这样你的子目录就不会被处理。重复:我想他们在那里通过与某个文件匹配来更改目录名。在这里,我想用相应目录中的目录名来更改文本文件。那么它将如何重复question@user2141046My问题是用受尊重的目录名重命名.txt文件。@Borodini有几个问题1)为什么使用($$)2)如果我执行此代码,它将命名目录如果我再次执行相同的代码,它将两次重命名文件名为什么会这样。。例如(rest1-rest1-rest\u rest1-rest1-rest.txt)@v.sheldeshov($$)-只是为了定义runDir需要2个变量。以避免以后使用时出错。“res”问题:若文件名是从前缀开始的,那个么添加额外的检查并不太难。将}elsif((-f$dir./'.$file)&&($file=~/\.txt$/){………..替换为}elsif(-f$dir./'.$file)&($file=~/\.txt$/)&($file!~/^$prefix/){
#!/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