How do I print all .pdf files names to an output file with command line?

前端 未结 5 1190
逝去的感伤
逝去的感伤 2021-02-04 08:53

This seems easy in Linux, but I\'m trying to print the names of *.pdf files within a directory and its subdirectories to an output file. I have Perl installed on my

相关标签:
5条回答
  • 2021-02-04 09:31
    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 讨论(0)
  • 2021-02-04 09:40

    Not much different than Linux.

    dir *.pdf > fileyouwant.txt
    

    If you only want the filenames, you can do that with

    dir/b *.pdf > fileyouwant.txt
    

    If you also want subdirs,

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

    If you aren't in that directory to start with

    dir/s/b C:\Path\*.pdf > fileyouwant.txt
    
    0 讨论(0)
  • 2021-02-04 09:40

    File::Find::Rule is often nicer to use than 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";
    }
    

    or simply

    use File::Find::Rule;
    
    print "$_\n" for File::Find::Rule->file()->name('*.pdf')->in('C:/Path/');
    
    0 讨论(0)
  • 2021-02-04 09:41

    Using Perl, you should almost certainly be using the File::Find core module.

    0 讨论(0)
  • 2021-02-04 09:44

    See the File::Glob module.

    Specifically:

    #!/usr/bin/perl
    use File::Glob ':glob'; # Override glob built-in.                          
    print join("\n",glob("*.pdf"));
    
    0 讨论(0)
提交回复
热议问题