2010-12-23 26 views

cevap

29

pek farklı değil. Yalnızca dosya istiyorsanız başlamak bu dizinde değilseniz

dir *.pdf > fileyouwant.txt 

, sen

dir/b *.pdf > fileyouwant.txt 

ile de subdirs istiyorsanız o

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

yapabilirsiniz

dir/s/b C:\Path\*.pdf > fileyouwant.txt 
+0

Bu alt dizinlerinde dosyalar bulamazlar. –

+0

Alt dizinlere özyinelemeli arama yapılıyor mu? –

+1

dir/s/b bunu yapar. Önce hedef üst dizine cd koymanız gerekir. – ysth

0

Perl'i kullanarak, neredeyse kesinlikle File::Find çekirdek modülünü kullanmalıdır.

0

File::Glob modülüne bakın. Özellikle

:

#!/usr/bin/perl 
use File::Glob ':glob'; # Override glob built-in.       
print join("\n",glob("*.pdf")); 
+0

Alt dizinler yapmazsınız – ysth

+0

@ysth: Benim kötüyüm, ama yine de birileri için yararlı olabilir, bu yüzden onu bırakacağım. – robert

1
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

Bu çalıştı, ancak dizin adı için bana sorduktan sonra çıktıyı bir dosyaya yazdırabilir miyim? – Jake

+0

@Jake: dizin ismini bir komut satırı parametresi olarak almak için değiştirildi, böylece çıktı bir dosyaya kolayca gönderilebilir – ysth

1

File::Find::RuleFile::Find daha kullanmak çoğu zaman daha güzel.

use File::Find::Rule; 

my $rule = File::Find::Rule->file()->name('*.pdf')->start('C:/Path/'); 
while (defined (my $pdf = $rule->match)) { 
    print "$pdf\n"; 
} 

veya basitçe

use File::Find::Rule; 

print "$_\n" for File::Find::Rule->file()->name('*.pdf')->in('C:/Path/'); 
İlgili konular