Open In App

Perl | Finding Files and Directories

For traversing a directory tree in Perl, there are several ways/methods. Traversing can be performed through function calls opendir and readdir which are a part of Perl programming language. Traversing files and directories in Perl can also be done through File::Find module which comes with the Perl language.

File::Find contains 2 modules:



The only difference among both the modules is the order in which the files and directories are parsed. Find modules in Perl has all the functions similar to the Unix Find command.
Find function takes two arguments:

Following are some example scripts of Perl to find the Files and Directories:

Example 1: To print all the available directories in the searched folder.






#!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;

Output:


 
Example 2: To print out the files available in a directory




#!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;

Output:


 
Example 3: Printing only once all the directories available/present in the folder/directory we are accessing.




#!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;

Output:


 
Example 4: To access the files present inside a directory without accessing the other directories available in that same directory.




#!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;

Output:


 
Example 5: Use of finddepth() function to find the files and sub-directories in a directory.




#!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;


 
Example 6: To find all types of text files.




#!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;

Output:


Article Tags :