【发布时间】:2011-05-29 18:25:09
【问题描述】:
这在 Linux 中似乎很容易,但我正在尝试将目录及其子目录中的 *.pdf 文件的名称打印到输出文件中。我在我的 Windows 机器上安装了 Perl。
有什么简单的方法可以做到这一点?
【问题讨论】:
标签: windows perl command-line printing
这在 Linux 中似乎很容易,但我正在尝试将目录及其子目录中的 *.pdf 文件的名称打印到输出文件中。我在我的 Windows 机器上安装了 Perl。
有什么简单的方法可以做到这一点?
【问题讨论】:
标签: windows perl command-line printing
与 Linux 没有太大区别。
dir *.pdf > fileyouwant.txt
如果你只想要文件名,你可以这样做
dir/b *.pdf > fileyouwant.txt
如果你还想要子目录,
dir/s/b *.pdf > fileyouwant.txt
如果你不在那个目录下
dir/s/b C:\Path\*.pdf > fileyouwant.txt
【讨论】:
dir 是否对子目录进行递归搜索?
使用 Perl,您几乎肯定会使用 File::Find 核心模块。
【讨论】:
查看File::Glob 模块。
具体来说:
#!/usr/bin/perl
use File::Glob ':glob'; # Override glob built-in.
print join("\n",glob("*.pdf"));
【讨论】:
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 );
【讨论】:
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/');
【讨论】: