一个完整的 Perl 脚本示例,能够在 Linux/Unix 环境下对包含百万级文件的目录进行流式遍历并删除匹配关键字的文件。
代码
#!/usr/bin/env perl
use strict;
use warnings;
# 命令行参数解析
my ($dir, $pattern) = @ARGV;
die "Usage: $0 <directory> <pattern>\n" unless $dir && $pattern;
# 切换到目标目录
chdir $dir or die "Cannot change directory to '$dir': $!\n";
# 统计器初始化
my $count = 0; # 记录删除成功的文件数
# 打开目录句柄
opendir my $dh, "." or die "Cannot open directory '$dir': $!\n";
# 流式遍历
while (defined(my $file = readdir $dh)) {
next if $file eq '.' || $file eq '..'; # 跳过特殊目录项
next unless $file =~ /$pattern/i; # 模糊匹配关键字
# 删除并统计
my $deleted = unlink $file;
if ($deleted) {
warn "Deleting: $file\n";
$count += $deleted;
} else {
warn "Failed to delete '$file': $!\n";
}
}
closedir $dh;
# 输出总计
warn "Total deleted: $count\n";
使用方法
# 删除当前目录中所有文件名包含 “vacation” 的文件,并统计删除数量
perl delete_by_pattern.pl /path/to/photos vacation
# 在 ./data 目录删除带 “tmp” 的文件
perl delete_by_pattern.pl ./data tmp