2010-12-23 151 views
13

这在Linux中似乎很容易,但我试图将目录及其子目录中的* .pdf文件的名称打印到输出文件。我在我的Windows机器上安装了perl。什么是一个简单的方法来做到这一点?命令行打印文件名输出文件

感谢, 杰克

回答

29

没有比Linux太大的不同。

dir *.pdf > fileyouwant.txt 

如果你只想要的文件名,你可以做到这一点与

dir/b *.pdf > fileyouwant.txt 

如果你也想子目录,

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

如果不在该目录下手

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

子目录中这不会查找文件。 – 2010-12-23 02:55:18

+0

`dir`是否对子目录进行递归搜索? – 2010-12-23 02:55:45

+1

dir/s/b。你必须首先进入目标顶层目录。 – ysth 2010-12-23 03:01:39

0

使用Perl,你应该几乎肯定会使用File::Find核心模块。

0

请参阅File::Glob模块。

具体来说:

#!/usr/bin/perl 
use File::Glob ':glob'; # Override glob built-in.       
print join("\n",glob("*.pdf")); 
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); 
1

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/');