📜  珀尔 |查找文件和目录

📅  最后修改于: 2022-05-13 01:55:41.860000             🧑  作者: Mango

珀尔 |查找文件和目录

对于在 Perl 中遍历目录树,有几种方法/方法。可以通过函数调用opendirreaddir来执行遍历,它们是 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;

输出: