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