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