2016-04-04 3 views
0

Я хотел бы добавить префикс для всех файлов в папке и во всех файлах во всех дочерних папках.переименовать файлы в папке и ее папках. Дети

Exemple:

 hello\file1 
hello2\file2 
file3 
file4

результат должен быть после добавления префикса PRE_

 hello\PRE_file1 
hello2\PRE_file2 
PRE_file3 
PRE_file4

я пытался сделать это:

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

но изменить все имя , Спасибо

+0

В Unix, 'rename' команда вероятно, то, что вы хотите. –

+0

Возможный дубликат [Найти и заменить имя файла рекурсивно в каталоге] (http://stackoverflow.com/questions/9393607/find-and-replace-filename-recursively-in-a-directory) –

+1

найти. -type f -exec sh -c 'mv "$ 0" "$ (dirname" $ ​​0 ")/PRE _ $ (basename" $ ​​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

Смежные вопросы