Как напечатать все имена файлов .pdf в выходной файл с командной строкой? - PullRequest
13 голосов
/ 23 декабря 2010

Это кажется простым в Linux, но я пытаюсь напечатать имена *.pdf файлов в каталоге и его подкаталогах в выходной файл.На моем компьютере с Windows установлен Perl.

Какой простой способ сделать это?

Ответы [ 5 ]

30 голосов
/ 23 декабря 2010

Не сильно отличается от Linux.

dir *.pdf > fileyouwant.txt

Если вы хотите только имена файлов, вы можете сделать это с помощью

dir/b *.pdf > fileyouwant.txt

Если вы также хотите подкаталоги,

dir/s/b *.pdf > fileyouwant.txt

Если вы не в этом каталоге, чтобы начать с

dir/s/b C:\Path\*.pdf > fileyouwant.txt
1 голос
/ 23 декабря 2010

File :: Find :: Rule часто лучше использовать, чем 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/');
1 голос
/ 23 декабря 2010
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 );
0 голосов
/ 23 декабря 2010

См. Модуль File :: Glob .

В частности:

#!/usr/bin/perl
use File::Glob ':glob'; # Override glob built-in.                          
print join("\n",glob("*.pdf"));
0 голосов
/ 23 декабря 2010

Используя Perl, вы почти наверняка должны использовать основной модуль File :: Find .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...