删除命令-perl脚本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
perl脚本——删除文件夹中大量文件
如果有好几万,数十万个文件要删除,使用rm系统命令删除会报错,即超过了系统可打开的文件数量。
而如果用“find /usr/local/movies -mtime +5 -type f -name '41???t*.ts*' -exec rm -f {} \;”的命令,即删除超过5天的,文件名匹配“41???t*.ts*”的文件,是可以删除的,但看不到删除的进度,等着人着急。
刚开始学perl,尽管正则表达式不好学,也不想学。不过从书上拼拼凑凑下,足以写出删除的脚本!
以下为删除某个文件夹中所有文件(该文件夹中都为文件,即里面不能有目录,否则要改下脚本,或者先到文件夹内部先删除里面的文件夹中的文件)及该目录的脚本。运行时自我感觉良好!
每删除500个文件,打印一条信息“当前时间文件总数剩余文件数量。在做删除操作的时候,让人看着感觉爽爽”:
[root@VOD-VSS-1 movies]# vi dealfile.pl
#!/usr/bin/perl -w
use warnings;
# 如果要删除其他文件夹,请自行修改
my $DIR_PATH = "/usr/local/movies/00_tmp_recycle";
## 显示年月日时分秒 ############################################################ sub getTime(){
my ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$day=($sec<10)?"0$sec":$sec;
$min=($min<10)?"0$min":$min;
$hour=($hour<10)?"0$hour":$hour;
$day=($day<10)?"0$day":$day;
$mon=($mon<9)?"0".($mon+1):($mon+1);
$year+=1900;
my $now="$year-$mon-$day $hour:$min:$sec";
return $now;
}
## get total file ###############################################################
$filenumber =-2;
opendir DIR, $DIR_PATH or die "Can not open $DIR_PATH : $!";
foreach $file (readdir DIR ){
$filenumber ++;
}
closedir DIR;
print "File number: ".$filenumber."\n";
##### remove files ############################################################## $rmnumber=0;
opendir DIR, $DIR_PATH or die "Can not open $DIR_PATH : $!";
foreach $file (readdir DIR ){
unlink($DIR_PATH."/".$file);
$rmnumber ++;
if ($rmnumber % 500 == 0) {
print getTime()." Total files: ".$filenumber." Remain files: ".($filenumber-$rmnumber)."\n";
}
}
closedir DIR;
##### remove dir #################################################################### rmdir($DIR_PATH)||die "Cannot rm dir";
[root@VOD-VSS-1 movies]# chmod a+x dealfile.pl
[root@VOD-VSS-1 movies]# ./dealfile.pl