我正在尝试使用数组将Linux中的ls
命令的内容输出到命令行。我遇到的唯一问题是,当使用if
语句查看文件时,它似乎只搜索脚本的PWD而不是指定的路径。
现在我的代码看起来像这样:
my $directory = $ARGV[0];
chomp (my @files = `ls -a $directory`);
my @plainfiles;
my @directories;
if (-f $_) {
push (@plainflies, $_);
}
elsif (-d $_) {
push (@directories, $_);
}
有什么想法吗?
答案 0 :(得分:2)
您必须检查"$directory/$_"
而不是$_
。
其次,File :: Slurp :: read_dir()可以为您完成相同的工作而无需调用外部命令,也可以过滤掉"。"," .."等。File::Slurp查看详细信息。
答案 1 :(得分:2)
ls directory
返回目录中的文件,即文件名,而不是前缀为目录名的文件名。除了使用shell命令获取文件的内容之外,这只是矫枉过正。尝试使用opendir和readdir以及map来获取前缀为目录的文件:
opendir(my $dh,$directory);
my @files = map { "$directory/$_" } grep { !m{^\.\.?$} } readdir($dh);
或者您可以使用glob来匹配特定文件(例如在这种情况下没有以“。”开头的文件):
my @files = glob("$directory/*");