Командная строка выводит имена файлов в выходной файл
В Linux это кажется простым, но я пытаюсь напечатать имена файлов *.pdf в каталоге и его подкаталогах в выходной файл. У меня установлен perl на моей машине с Windows. Какой простой способ сделать это?
Спасибо,
Джейк
Ответы
Ответ 1
Не сильно отличается от Linux.
dir *.pdf > fileyouwant.txt
Если вы хотите только имена файлов, вы можете сделать это с помощью
dir/b *.pdf > fileyouwant.txt
Если вы также хотите поддиры,
dir/s/b *.pdf > fileyouwant.txt
Если вы не находитесь в этом каталоге, чтобы начать с
dir/s/b C:\Path\*.pdf > fileyouwant.txt
Ответ 2
use strict;
use warnings;
use File::Find;
my $dirname = shift or die "Usage: $0 dirname >outputfile";
File::Find::find( sub {
print $File::Find::name, "\n" if $File::Find::name =~ /\.pdf\z/
}, $dirname );
Ответ 3
Файл:: Найти:: Правило часто лучше использовать, чем File:: Find.
use File::Find::Rule;
my $rule = File::Find::Rule->file()->name('*.pdf')->start('C:/Path/');
while (defined (my $pdf = $rule->match)) {
print "$pdf\n";
}
или просто
use File::Find::Rule;
print "$_\n" for File::Find::Rule->file()->name('*.pdf')->in('C:/Path/');
Ответ 4
Используя Perl, вы почти наверняка будете использовать File:: Find основной модуль.
Ответ 5
См. Файл:: Glob.
В частности:
#!/usr/bin/perl
use File::Glob ':glob'; # Override glob built-in.
print join("\n",glob("*.pdf"));