如何搜索.exe文件

时间:2009-09-08 06:48:32

标签: perl

你们对如何在服务器上搜索或列出.exe文件有所了解吗? 我目前正在使用(或者可能将它放在一个数组中)? 我将在我的Perl程序中使用此命令。假设我的程序也位于所述服务器上。 我的操作系统是Linux - Ubuntu即使这很重要,以防万一。在这里使用CLI。 =)

5 个答案:

答案 0 :(得分:5)

如上所述,目前尚不清楚您是否需要'* .exe'文件或可执行文件。 您可以使用File :: Find :: Rule查找所有可执行文件。

  my @exe= File::Find::Rule->executable->in( '/');     # all executable files  
  my @exe= File::Find::Rule->name( '*.exe')->in( '/'); # all .exe files

如果您正在寻找可执行文件,您(运行脚本的用户)需要能够执行该文件,因此您可能需要以root身份运行该脚本。

可能需要很长时间才能跑到。

如果您要查找.exe文件,则可能是您的磁盘已被locate编入索引。所以这会快得多:

  my @exe= `locate \.exe | grep '\.exe$'`

答案 1 :(得分:1)

Perl查找指定目录下具有.exe后缀的每个文件:

#!/usr/bin/perl

use strict;

use File::Spec;
use IO::Handle;

die "Usage: $0 startdir\n"
    unless scalar @ARGV == 1;
my $startdir = shift @ARGV;

my @stack;

sub process_file($) {
    my $file = shift;
    print $file
        if $file =~ /\.exe$/io;
}

sub process_dir($) {
    my $dir = shift;
    my $dh = new IO::Handle;
    opendir $dh, $dir or
        die "Cannot open $dir: $!\n";
    while(defined(my $cont = readdir($dh))) {
        next
            if $cont eq '.' || $cont eq '..';
        my $fullpath = File::Spec->catfile($dir, $cont);
        if(-d $fullpath) {
            push @stack, $fullpath
                if -r $fullpath;
        } elsif(-f $fullpath) {
            process_file($fullpath);
        }
    }
    closedir($dh);
}

if(-f $startdir) {
    process_file($startdir);
} elsif(-d $startdir) {
    @stack = ($startdir);
    while(scalar(@stack)) {
        process_dir(shift(@stack));
    }
} else {
    die "$startdir is not a file or directory\n";
}

答案 2 :(得分:1)

查看File::Find

或者,如果您可以使用* nix file命令的命令行,则可以使用find2perl将该命令行转换为Perl代码段。

答案 3 :(得分:0)

我可能会因为建议而被击落,但你不必使用模块来完成一项简单的任务。例如:

#!/usr/bin/perl -w
@array = `find ~ -name '*.exe' -print`;
foreach (@array) {
    print;
}

当然,它需要对您选择的起始目录进行一些调整(这里,我用〜作为主目录)

编辑:也许我应该说直到你安装了模块

答案 4 :(得分:0)

以递归方式使用

use File::Find;
##cal the function by sending your search dir and type of the file
my @exe_files = &get_files("define root directory" , ".exe");

##now in @exe_files will have all .exe files

sub get_files() {
    my ($location,$type) = @_;
    my @file_list;
    if (defined $type) {
        find (sub { my $str = $File::Find::name;
            if($str =~ m/$type/g   ) {  
                push @file_list, $File::Find::name ;            
            } 
        }, $location);
    } else {
        find (sub {push @file_list, $File::Find::name }, $location);
    }
    return (@file_list);    
}