重命名文件夹及其文件夹子文件的文件

时间:2016-04-04 16:27:20

标签: regex linux perl shell

我想在文件夹中的所有文件和所有文件夹子项的所有文件中添加前缀。

例如:

 hello\file1
 hello2\file2
 file3
 file4 

结果应该是在添加前缀PRE _

之后
 hello\PRE_file1
 hello2\PRE_file2
 PRE_file3
 PRE_file4 

我试图这样做:

find . -type f -exec rename 's/^/PRE_/' '{}' \;

但它会修改所有名称。 谢谢

1 个答案:

答案 0 :(得分:1)

如果您愿意,也可以只使用perl,而无需任何其他模块:

use strict;
use warnings;

my ($prefix, $dir) = ('PRE_', '/home');
sub loop_dirs {
    my $path = $_[0];
    if (-d $path) { # if directory
         opendir my $dh, $path or die "$!";
         loop_dirs($path.'/'.$_) for grep ! /^\.{1,2}$/, readdir $dh; close $dh;
    } elsif (-e $path) { # if file
         prefix_add($path, $prefix); # do smth with file, e.g. rename
    }
}
sub prefix_add { my ($path, $pref) = @_; $path =~ s/([^\/]+)$/$pref$1/; rename $_[0], $path }
loop_dirs($dir);

此代码适用于Windows(ActivePerl)和Linux