我使用File :: Find - > find(\& f,$ directory)查找包含某些内容的文件。 我的代表的相关部分如下:
sub f {
my $file = $File::Find::name;
return unless -f $file;
return unless $file =~ /$file_pattern/;
etc...
但问题是,每次当前目录中不存在$ file时,此代码都会返回。 例如对于文件./test它很好,但对于文件./dir/test这个返回...
有没有更好的方法来了解$ file是否是文件?
答案 0 :(得分:7)
这一行
return unless -f $file;
如果$ file不是文件(可能是文件夹),将返回
这一行
return unless $file =~ /$file_pattern/;
如果文件名称不包含$ file_pattern,将返回。
请注意,根据文档,此子f()不会告诉File :: Find要查找哪些文件...
want()函数可以做任何事情 您希望在每个文件上进行验证 和目录。请注意,尽管如此 name,want()函数是一个 通用回调函数,并做 不告诉File ::查找文件是否 “通缉”与否。事实上,它的回归 值被忽略。
要查找文件夹中的所有文件,您可能会更容易使用File::Find::Rule。以下是文档中的示例...
my @files = File::Find::Rule->file()
->name( '*.pm' )
->in( @INC );
答案 1 :(得分:0)
如何使用
进行检查if (! -f $file) {
die "not a file";
}
答案 2 :(得分:-1)
谢谢大家的重播,但你错了:) 这是一些错误。它只适用于完整路径。 我进行了一些测试。这是代码:
#!/usr/bin/perl
use strict;
use File::Find;
use Cwd;
print "++ With relative path ++\n";
find(\&f, ".");
print "\n++ With current working directory module ++\n";
find(\&f, cwd);
sub f
{
my $file = $File::Find::name;
print $file . ":\n";
if (-f $file) { print "---- ist Datai\n"; }
else { print "---- ist nicht eine Datei!!!\n"; }
}
以下是命令:
[andrey @ andreys-comp testdir] $ ls -l innerdir /
共4
-rw-rw-r-- 1 andrey andrey 0 Jun 18 22:02 innertestfile
[andrey @ andreys-comp testdir] $ ./test.pl
++使用相对路径++
:
---- ist nicht eine Datei !!!
./test.pl:
---- ist Datai
./testfile:
---- ist Datai
./innerdir:
---- ist nicht eine Datei !!!
./innerdir/innertestfile:
---- ist nicht eine Datei !!!
++使用当前工作目录模块++
/家庭/安德烈/ TESTDIR:
---- ist nicht eine Datei !!!
/home/andrey/testdir/test.pl:
---- ist Datai
/家庭/安德烈/ TESTDIR / testfile的:
---- ist Datai
/家庭/安德烈/ TESTDIR / innerdir:
---- ist nicht eine Datei !!!
/家庭/安德烈/ TESTDIR / innerdir / innertestfile:
---- ist Datai
ist Datei:是档案
ist nicht eine Datei:不是文件(我只是喜欢德语:))
请注意,第一种方法./innerdir/innertestfile未确定为文件,而不是第二种方法。