Perl 在文件夹和子文件夹中查找文件
如果$file eq'.$file eq'..,我将使用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(
下一步
在目录和子目录(少数目录除外)中查找文件,并打开文件进行查找和替换。但是当我在文件夹名中有点时,它将文件夹视为文件,并且说无法打开。我使用-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