2016-01-31 101 views
1

我试图在Linux中使用数组获取命令行中ls命令的内容。我得到的唯一问题是,当使用if语句查看文件时,它似乎只在脚本的PWD中搜索,而不是在指定的路径中搜索。Perl - 检查目录中是否存在数组中的文件

现在我的代码如下所示:

my $directory = $ARGV[0]; 
chomp (my @files = `ls -a $directory`); 
my @plainfiles; 
my @directories; 
if (-f $_) { 
    push (@plainflies, $_); 
} 
elsif (-d $_) { 
    push (@directories, $_); 
} 

任何想法?

+2

您可能有兴趣使用glob:'my @files = <$ARGV[0]/*>' – TLP

回答

2

您必须检查"$directory/$_"而不是仅仅$_。其次,File :: Slurp :: read_dir()可以在不调用外部命令的情况下完成相同的工作,也可以过滤出“。”,“..”等等。详细信息请参考File::Slurp

+0

'read_file'读取文件内容,而不是文件名。 – TLP

+0

@TLP:谢谢。我把正确的链接到'read_dir',但不正确的名称'read_file'。更新。 –

2

ls directory返回目录内的文件,即只有文件名而不是文件名,前缀为目录名。除此之外,使用shell命令来获取文件的内容只是矫枉过正。尽量不使用执行opendir和地图一起READDIR得到与目录前缀的文件:

opendir(my $dh,$directory); 
my @files = map { "$directory/$_" } grep { !m{^\.\.?$} } readdir($dh); 

或者您可以使用水珠,以匹配特定的文件(如没有文件在这种情况下开始以“”):

my @files = glob("$directory/*"); 
相关问题