使用Perl脚本分组删除Linux上的文件夹

文章讲述了在公司使用Flink进行数据实时传输后,由于多次启动任务导致相同任务号的文件夹堆积。作者使用Perl语言编写脚本来清理这些无用文件夹,首先遍历文件夹,记录每个任务组的最大运行次数,然后删除非最大次数的任务文件夹,通过`File::Path`模块的`rmtree`函数实现递归删除。
摘要由CSDN通过智能技术生成

背景:我们公司使用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是不支持递归删除文件夹。

逻辑比较简单,第一遍循环就是分组筛选出最大的运行次数的文件夹,第二次循环就分组删除非最大次数的文件夹。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值