使用perl脚本检查是否存在txt文件

时间:2015-07-27 18:44:28

标签: perl file

我有一个目录/ home / textfile /

我想使用perl脚本检查此目录中是否存在* .txt文件。如果他们这样做,我想让它说“文本文件存在”。其他如果目录中没有文本文件,我希望它说“不存在文本文件”。文本文件可以有任何名称我只想检查该目录/ home / textfile中是否有文本文件。

以下是我尝试使用的脚本:

$filedir="/home/textfile/";
chdir($filedir);
if (-e "`ls *.txt`")
{
    print STDOUT "Text file exist"
}
else 
{
    print STDOUT "No Text file exist"
}

你能帮助我修复这个脚本,以便它能完成我正在寻找它的工作吗?

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用glob获取该目录中以.txt结尾的所有文件的列表。它避免了使用ls

的炮轰

喜欢这个

use strict;
use warnings;

my $dir = '/home/textfile';
my @files = glob "$dir/*.txt";

print "No " unless @files;
print "Text file exist\n";

答案 1 :(得分:0)

perldoc关于-X文件测试运算符:

  

文件测试,其中X是下面列出的字母之一。这个一元   operator接受一个参数,可以是文件名,文件句柄,也可以是   dirhandle,并测试相关文件以查看是否属实   关于它。

在用双引号括起ls命令时,您希望测试ls返回的文件名,但实际上您正在测试是否存在名为'ls *.txt'的文件。

有几个选项,您可以在单独的步骤中使用ls来获取所有文本文件名,然后测试是否存在单个文本文件名。

my @text_files = `ls *.txt`;
chomp(@text_files);

if ( -e $text_files[0] ) {
   ...
}
else {
   ...
}

但由于ls 返回现有文件,因此根本不需要-e检查。你可以简单地说:

my @text_files = `ls *.txt`;
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}

我也不应该这样做,因为你没有在$dir命令中使用ls,你实际上并没有查看$dir目录,而是当前的工作目录。您需要将$dir添加到ls命令:

my @text_files = `ls $dir/*.txt`;
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}

或者,你可以使用glob内置而不是shell ls,让Perl管理如何实际读取文件。这通常是更强大和可维护的解决方案:

my @text_files = glob("$dir/*.txt");
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}