Perl 在文件夹和子文件夹中查找文件

Perl 在文件夹和子文件夹中查找文件,perl,perl-module,Perl,Perl Module,如果$file eq'.$file eq'..,我将使用下一步在目录和子目录(少数目录除外)中查找文件,并打开文件进行查找和替换。但是当我在文件夹名中有点时,它将文件夹视为文件,并且说无法打开。我使用-f筛选了文件,但是它没有显示主文件夹中的文件 是否有任何递归的方法来找到文件夹和文件,即使它有点 opendir my $dh, $folder or die "can't open the directory: $!"; while ( defined( my $file = readdir(

如果$file eq'.$file eq'..,我将使用
下一步
在目录和子目录(少数目录除外)中查找文件,并打开文件进行查找和替换。但是当我在文件夹名中有点时,它将文件夹视为文件,并且说无法打开。我使用-f筛选了文件,但是它没有显示主文件夹中的文件

是否有任何递归的方法来找到文件夹和文件,即使它有点

opendir my $dh, $folder or die "can't open the directory: $!";

while ( defined( my $file = readdir( $dh ) ) ) {

    chomp $file;

    next if $file eq '.' $file eq '..';

    {
        if ( $file ne 'fp' ) {

            print "$folder\\$file";

            if ( $file =~ m/(.[^\.]*)\.([^.]+$)/ ) {
                ...
            }
        }
    }
}
对。使用

。。。就这样。几乎所有的“filetest”标志都有选项,因此
file()
用于
-f
readable()
用于
-r

您可以使用或按照Sobrique的建议

它非常容易使用:

#!/usr/bin/perl
use strict;
use warnings;
use File::Find;
sub process_file {
    next if (($_ eq '.') || ($_ eq '..'));
    if (-d && $_ eq 'fp'){
        $File::Find::prune = 1;
        return;
    }
    print "Directory: $_\n" if -d;
    print "File: $_\n" if -f;
    #Do search replace operations on file below
}
find(\&process_file, '/home/chankeypathak/Desktop/test.folder'); #provide list of paths as second argument.
我有下面的文件结构

test.folder/test.txt
test.folder/sub.folder
test.folder/sub.folder/subfile.txt
test.folder/fp
test.folder/fp/fileinsidefp.txt
我得到了低于输出

$ perl test.pl
File: test.txt
Directory: sub.folder
File: subfile.txt

您是否忘记了
|
(或)如果$file eq'.$file eq'.'在
下一步中?如果($file eq'.| |$file eq'..),它应该是
下一个(尽管这不能解决递归问题)。
chomp$file是不需要的。来自
readdir
的结果没有尾随的换行符。
File::Find
是一个标准模块;它与Perl一起提供<代码>文件::Fins::规则
必须从CPAN安装。有关标准模块的列表,请参见
perldoc perlmodlib
。除了@shawnhcorey所说的,您还可以使用命令行上的
corelist
来检查特定模块是否为核心:
corelist File::Find
只需放置一个条件
if(-d&&$$eq'fp'){next;}
子进程{u文件夹{next if($$eq'))\124;($\eq'..);if(-d&&$\ne'fp'){print“File:$\n”if-d;}}
没有发生任何事情如果我这样做,它不会显示任何内容…:-(
$ perl test.pl
File: test.txt
Directory: sub.folder
File: subfile.txt