背景:我们公司使用flink来做数据实时传输,然后每次起一个数据传输任务,就会新建一个
flink_任务号_次数
这个一个文件夹,有时候多次启动就会有多个任务号一样的文件夹,然后无用文件就非常多,所以我使用Perl语言来清理一波。
#!/usr/bin/perl
use File::Path qw(rmtree);
$dir = "/data/flink/jsonfiledir/*";
my @files = glob( $dir );
my %data;
foreach my $item (@files ){
@fileName=split(/_/,$item);
$group = @fileName[1];
$num = @fileName[2];
if(exists($data{$group})){
if ($num > $data{$group}){
$data{$group} = $num;
}
}else{
$data{$group} = $num;
}
}
foreach my $r_item (@files){
@r_fileName=split(/_/,$r_item);
$r_group = @r_fileName[1];
$r_num = @r_fileName[2];
if($data{$r_group} != $r_num){
rmtree( $r_item ) or die "无法删除 $r_item 目录";
}
}
使用use File::Path qw(rmtree);
用来递归删除文件夹,原生Perl是不支持递归删除文件夹。
逻辑比较简单,第一遍循环就是分组筛选出最大的运行次数的文件夹,第二次循环就分组删除非最大次数的文件夹。