珀尔 |查找文件和目录
对于在 Perl 中遍历目录树,有几种方法/方法。可以通过函数调用opendir和readdir来执行遍历,它们是 Perl 编程语言的一部分。在 Perl 中遍历文件和目录也可以通过 Perl 语言附带的File::Find
模块来完成。
File::Find 包含 2 个模块:
- Find:
find()
函数对提及/定义的@directories 执行深度优先搜索。它为在该目录中找到的每个文件或子目录调用并调用"&wanted"
函数。find()
从上到下工作。 - Finddepth:
finddepth()
执行后序遍历而不是执行前序遍历,从下到上工作。finddepth()
函数的工作几乎与find()
函数相似,除了它首先为目录的内容调用&wanted
而不是为目录调用它。
两个模块之间的唯一区别是文件和目录的解析顺序。 Perl 中的 Find modules 具有与 Unix Find
命令类似的所有功能。
Find
函数有两个参数:
- 第一个参数是为我们通过
find
函数找到的每个文件调用的子程序。 - 第二个参数是
find
函数要搜索文件的目录列表。
以下是一些用于查找文件和目录的 Perl 示例脚本:示例 1:打印搜索文件夹中的所有可用目录。
#!usr/bin/perl
print "content-type: text/html\n\n";
use strict;
use warnings;
use File::Find;
find(
{
wanted => \&findfiles,
},
'GeeksforGeeks'
);
sub findfiles
{
#To search only the directory
print "$File::Find::dir\n";
}
exit;
输出:
示例 2:打印目录中可用的文件
#!usr/bin/perl
print "content-type: text/html\n\n";
use strict;
use warnings;
use File::Find;
find(
{
wanted => \&findfiles,
},
'GeeksforGeeks'
);
sub findfiles
{
#To search the files inside the directories
print "$File::Find::name\n";
}
exit;
输出:
示例 3:仅打印一次我们正在访问的文件夹/目录中所有可用/存在的目录。
#!usr/bin/perl
print "content-type: text/html\n\n";
use strict;
use warnings;
use File::Find;
find(
{
wanted => \&findfiles,
},
'GeeksforGeeks'
);
sub findfiles
{
# To search all the available directories
# in the given directory without accessing them
print "$File::Find::name\n" if -d;
}
exit;
输出:
示例 4:访问目录中存在的文件而不访问同一目录中可用的其他目录。
#!usr/bin/perl
print "content-type: text/html\n\n";
use strict;
use warnings;
use File::Find;
find(
{
wanted => \&findfiles,
},
'GeeksforGeeks'
);
sub findfiles
{
# Not accessing Geeks_New and Image directory
# present inside the dir GeeksforGeeks
$File::Find::prune = 1 if /Geeks_New/;
$File::Find::prune = 1 if /Images/;
# To print the files present in dir GeekforGeeks
print "$File::Find::name\n";
}
exit;
输出:
示例 5:使用finddepth()
函数查找目录中的文件和子目录。
#!usr/bin/perl
print "content-type: text/html\n\n";
use strict;
use warnings;
use File::Find;
finddepth(
{
wanted => \&findfiles,
},
'GeeksforGeeks'
);
sub findfiles
{
print "$File::Find::name\n";
}
exit;
示例 6:查找所有类型的文本文件。
#!usr/bin/perl
print "content-type: text/html\n\n";
use strict;
use warnings;
use File::Find;
find(
{
wanted => \&findfiles,
},
'GeeksforGeeks'
);
sub findfiles
{
print "$File::Find::name\n" if -T;
}
exit;
输出: