Перемещение по каталогам

Я пытаюсь пройти по каталогам, чтобы изменить определенные расширения файлов в этих каталогах.

Я добрался до того места, где я могу пройти через каталог, заданный через командную строку, но я не могу заставить его проходить через подкаталоги этих каталогов.

Например: если я хочу изменить расширения файлов в каталоге Test, тогда, если у Test есть подкаталог, я хочу иметь возможность пройти через этот каталог и также изменить расширения файлов этих файлов.

Я это придумал. Это работает для одного каталога. Он правильно изменяет расширения файлов в одном конкретном каталоге.

#!/usr/local/bin/perl

use strict;
use warnings;


my @argv;
my $dir = $ARGV[0];

my @files = glob "${dir}/*pl";
foreach (@files) {
    next if -d;
    (my $txt = $_) =~ s/pl$/txt/;

    rename($_, $txt);
}

Затем я услышал о File :: Find :: Rule, поэтому попытался использовать его для перемещения по каталогам.

Я придумал это:

   #!/usr/local/bin/perl

use strict;
use warnings;
use File::Find;
use File::Find::Rule;

my @argv;
my $dir = $ARGV[0];
my @subdirs = File::find::Rule->directory->in( $dir );

sub fileRecurs{
        my @files = glob "${dir}/*pl";
        foreach (@files) {
                next if -d;
                (my $txt = $_) =~ s/pl$/txt/;
                rename($_, $txt);
                }
           }

Это не работает / не будет работать, потому что я недостаточно знаком с File :: Find :: Rule

Есть ли лучший способ пройти по каталогам, чтобы изменить расширения файлов?


person MipsMoreLikeWhips    schedule 19.11.2014    source источник
comment
Когда вы рекурсивно просматриваете вложенные каталоги, вы определенно хотите использовать File::Find. Вот руководство   -  person David    schedule 19.11.2014


Ответы (1)


#!/usr/local/bin/perl

use strict;
use warnings;
use File::Find;


my @argv;
my $dir = $ARGV[0];

find(\&dirRecurs, $dir);

sub dirRecurs{


        if (-f)
        {
                (my $txt = $_) =~ s/pl$/txt/;
                rename($_, $txt);
        }

}

Я понял это с помощью учебника, который мне прислал @David! Спасибо!

person MipsMoreLikeWhips    schedule 19.11.2014