您没有描述文件的格式missing
,但我猜它每行包含一个文件,并提供文件的完整绝对路径。如果我猜错了,您将需要调整此解决方案。
该程序将missing
文件加载到哈希中。每个散列元素都以文件名作为键,值为 1。
打开目录,将flags
路径添加到每个文件名中,形成$filename
. 如果文件名没有出现在%missing
散列中,则打印文件名。要实际删除文件,unlink
应取消注释该行。
use strict;
use warnings;
my $missing = "/home1/t01jkxj/check_st/missing";
open my $fh, '<', $missing or die qq(Unable to open "$missing" for read: $!);
my %missing;
while (<$fh>) {
next unless /\S/;
chomp;
$missing{$_} = 1;
}
my $dir = '/path/to/flags';
opendir my $dh, $dir or die qq(Unable to open directory "$dir": $!);
for my $file (readdir $dh) {
my $filename = "$dir/$file";
unless ($missing{$filename}) {
# unlink $filename;
print qq(File "$filename" deleted as not found in 'missing' file\n);
}
}