我想编写一个 Perl 脚本,它从目录树的顶部开始(在命令行参数中提供)并递归地遍历每个子目录,对每个文件执行特定操作。
我正在使用finddepth
它,但是当我在距离基本目录两级或更高级别的目录上运行脚本时,它似乎不起作用。
这是我的代码:
#!/usr/local/bin/perl -w
use strict;
use File::Copy;
use File::Find;
use File::Basename;
use File::Path;
finddepth(\&file_list, @ARGV);
sub file_list {
my ($file_path, $name, $path, $suffix);
$file_path = $File::Find::name;
($name, $path, $suffix) = fileparse($file_path, /\.*/);
my $fullname = $name . $suffix;
my $file = $fullname;
if ($file =~ /^[^\.].*[^\.pl]$/) {
copy($file, "$file.orig");
open(FILE, "$file");
my @file_data = <FILE>;
close(FILE);
open(FOUT, ">$file") or die " \n File cannot be opened !";
foreach my $line (@file_data) {
if ($line =~ /^\s+Error:/) {
$line =~ s/([^-]\d+)/ \*\*/gc;
print FOUT $line;
}
else {
print FOUT $line;
}
}
close(FOUT);
}
}
始终抛出以下警告/错误:
- 读取关闭的文件句柄
- 文件打不开!
我似乎无法弄清楚为什么会这样。我试图让我的问题尽可能具体。如果您需要更多信息,请告诉我。谢谢你。