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

使用perl脚本检查txt文件是否存在,perl,file,Perl,File,我有一个目录/home/textfile/ 我想使用一个perl脚本来检查*.txt文件是否存在于这个目录中。如果他们这样做,我想让它说“文本文件存在”。其他如果目录中没有文本文件,我希望它说“没有文本文件存在”。文本文件可以有任何名称,我只想检查/home/textfile目录中是否有文本文件 下面是我尝试使用的脚本: $filedir="/home/textfile/"; chdir($filedir); if (-e "`ls *.txt`") { print STDOUT "Te

我有一个目录/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"
}

你能帮我修复这个脚本,让它完成我希望它完成的任务吗?

最简单的方法是使用
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";

最简单的方法是使用
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";

最简单的方法是使用
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";

最简单的方法是使用
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";
关于-X文件测试操作符:

文件测试,其中X是下面列出的字母之一。这个一元 运算符接受一个参数,即文件名、文件句柄或 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"
}
我也不应该这么说,因为您在
ls
命令中没有使用
$dir
,所以您实际上不是在
$dir
目录中查找,而是在当前工作目录中查找。您需要将
$dir
添加到
ls
命令:

my @text_files = `ls $dir/*.txt`;
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
或者,您可以使用内置函数,而不是将其分解为
ls
,并让Perl管理如何实际读取文件。这通常是更健壮、更易于维护的解决方案:

my @text_files = glob("$dir/*.txt");
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
关于-X文件测试操作符:

文件测试,其中X是下面列出的字母之一。这个一元 运算符接受一个参数,即文件名、文件句柄或 dirhandle,并测试关联的文件,以查看是否存在错误 关于它

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

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

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

my @text_files = `ls *.txt`;
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
我还应该注意到,由于在
ls
命令中没有使用
$dir
,因此实际上不是在
$dir
目录中查找,而是在当前工作目录中查找。您需要将
$dir
添加到
ls
命令:

my @text_files = `ls $dir/*.txt`;
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
或者,您可以使用内置函数,而不是将其分解为
ls
,并让Perl管理如何实际读取文件。这通常是更健壮、更易于维护的解决方案:

my @text_files = glob("$dir/*.txt");
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
关于-X文件测试操作符:

文件测试,其中X是下面列出的字母之一。这个一元 运算符接受一个参数,即文件名、文件句柄或 dirhandle,并测试关联的文件,以查看是否存在错误 关于它

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

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

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

my @text_files = `ls *.txt`;
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
我还应该注意到,由于在
ls
命令中没有使用
$dir
,因此实际上不是在
$dir
目录中查找,而是在当前工作目录中查找。您需要将
$dir
添加到
ls
命令:

my @text_files = `ls $dir/*.txt`;
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
或者,您可以使用内置函数,而不是将其分解为
ls
,并让Perl管理如何实际读取文件。这通常是更健壮、更易于维护的解决方案:

my @text_files = glob("$dir/*.txt");
if ( @text_files ) {
    print "Text file exist"
}
else {
    print "No Text file exist"
}
关于-X文件测试操作符:

文件测试,其中X是下面列出的字母之一。这个一元 运算符接受一个参数,即文件名、文件句柄或 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"
}
我也不应该那样