[Perl系列—] 1. 清空目录及目录中的所有文件
Perl 删除单个文件和目录
Perl 删除单个文件的语法是: unlink
举例来说, 删除 D 盘 temp 目录下的 test.txt 的写法就是:
unlink "D:/temp/test.txt"
如果要删除这个目录中所有的文件的话(不包含子目录)
unlink glob "D:/temp/*"
Perl 删除单个目录的语法是: rm
类似, 删除上面的temp 目录的写法就可以是:
rmdir "D:/temp"
看起来很简单, 但是需要注意的是:
1. 如果目录下有文件的话,rmdir 就不能删除目录, 这个看起来很正常。
2. 如果子目录下只有子目录的话, rmdir 也不能删除此目录。
3. uplink 只会删除当前目录下的文件, 对于子目录中的文件并不会删除。
4. 如果目录下没有文件的话, 执行uplink /* 会出错
所以要清空一个目录, 就要特别处理了。
删除目录中所有的内容, 包含它本身
解决方式就是递归循环子目录,依次删除下面的文件和目录。
需要完成的功能有:
1. 得到目录中的文件
2. 得到目录的中子目录
3. 递归删除子目录及文件
代码
贴上代码
#******************************************************************************
# NAME: clear_folder_content
# DESCRIPTION: delete Folder content recursive, max deep is 100
# ARGUMENTS: 1. $folder_path
# 2. $delete_empty_folder: [1,0] 1==>delete empty folder
# 3. $log: [1,0] 1==> print delete info 0==>not print delete info
# AUTHOR: Oscar999
#******************************************************************************
sub clear_folder_content
{my($folder_path,$delete_empty_folder,$log) = @_;&clear_folder_content_recursive($folder_path,$delete_empty_folder,$log,0);
}
sub clear_folder_content_recursive
{my($folder_path,$delete_empty_folder,$log,$deep_length) = @_;my @folder_files = &get_folder_files($folder_path);my $folder_files_size = @folder_files;if($folder_files_size>0){my $delete_count = unlink glob "$folder_path/*" or die "can't clear folder:$folder_path. Reason: $! \n";print "Delete $delete_count files under $folder_path! \n" if ($log==1);} my @sub_folders = &get_sub_floders($folder_path);foreach(@sub_folders){my $sub_folder = $_;my $sub_folder_path = $folder_path."/".$sub_folder;my $sub_deep_length = $deep_length +1;if($sub_deep_length<100){&clear_folder_content_recursive($sub_folder_path,$delete_empty_folder,$log,$sub_deep_length);} }if($delete_empty_folder==1){rmdir $folder_path or die "can't remvoe $folder_path. Reason: $!\n";print "Delete folder: $folder_path! \n" if ($log==1);}
}
#******************************************************************************
# NAME: get_sub_floders
# DESCRIPTION: get sub Folders under a Folder
# ARGUMENTS: 1.Folder path
# AUTHOR: Oscar999
#******************************************************************************
sub get_sub_floders
{my ($folder_path) = @_;my @sub_floder_names;$folder_path .= "/" unless($folder_path=~/\/$/);#open Floderopendir (FOLDER_PATH, $folder_path) or die "can't open directory $folder_path: $!";my @file_list = readdir FOLDER_PATH; closedir FOLDER_PATH;my $file_name;foreach (@file_list) {$file_name = $folder_path.$_;if($_ eq "." || $_ eq ".."){next;} push(@sub_floder_names, $_) if(-d $file_name) ;}return @sub_floder_names;
}#******************************************************************************
# NAME: get_folder_files
# DESCRIPTION: get Files under a Folder
# ARGUMENTS: 1.Folder path
# AUTHOR: Oscar999
#******************************************************************************
sub get_folder_files
{my ($folder_path) = @_;my @file_names;$folder_path .= "/" unless($folder_path=~/\/$/);#open Floderopendir (FOLDER_PATH, $folder_path) or die "can't open directory $folder_path: $!";my @file_list = readdir FOLDER_PATH; closedir FOLDER_PATH;my $file_name;foreach (@file_list) {$file_name = $folder_path.$_;if($_ eq "." || $_ eq ".."){next;} push(@file_names, $_) if(-f $file_name) ;}return @file_names;
}
调用方式:
&clear_folder_content("D:/temp",1,1);
[Perl系列—] 1. 清空目录及目录中的所有文件相关推荐
- 使用Shell遍历目录及其子目录中的所有文件方法
#! /bin/bashfunction read_dir(){for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令doif [ -d $1"/"$f ...
- linux c 读取目录及其子目录下所有.jpg文件的文件名(无后缀)
此程序用来生成<yolo v2中VOC数据生成labels所需的图片文件名文档>train.txt linux c 读取目录及其子目录下所有.jpg文件的文件名: http://www ...
- Angular应用中tsconfig.json文件配置说明及配置全局路径映射
tsconfig.json文件配置说明 1. tsconfig.json文件中的选项配置 2. 配置全局路径映射 1. tsconfig.json文件中的选项配置 TypeScript编译器配置文件的 ...
- Linux中 mv(文件移动)
mv命令的功能有以下两种: source targetmv 参数1 参数2 1.对文件或目录重新命名 如果源文件和目标文件在同一个目录下,mv的作用就是改文件名. 2.将文件从一个目录移到另一个目录中 ...
- linux的tmp目录不会清空,关于Linux系统中/tmp目录的清除问题
关于Linux系统中/tmp目录的清除问题 相当悲剧的问题是,之前保存在/tmp目录中的一些数据丢了.现在发现已经是第二次发生了,前一次以为是其他人误操作删除的,今天才发现这个和系统有关系.完全是因为 ...
- 网络安全系列之四十六 在IIS6中配置目录安全性
Web站点默认是允许匿名访问的,某些特殊网站(或者虚拟目录)如果要求用户提供账号和密码才能访问,或者限定某些IP地址能(或不能)访问,那可以通过在Web站点属性的"目录安全性"选项 ...
- Skype For Business 2015实战系列2:安装活动目录
Skype For Business 2015实战系列2:安装活动目录 今天开始我们就正式进入了Skype For Business 2015的部署阶段,在部署开始之前,我们先来看一下我们本次的环境列 ...
- linux 多级目录查找,Linux如何在多级目录中查找某个文件
Linux在多级目录中查找某个文件的方法:find /dir -name filename.ext du -a | grep filename.ext locate filename.ext Linu ...
- maven只打包java目录_ssm项目中maven对resources目录打包的路径_默认路径,自定义路径...
博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导): ssm项目打包后mybatis的mapper.xml文件没有放进去 问题出现的原因: ssm项目打包后mybatis的m ...
最新文章
- 2015最流行的Android组件、工具、框架大全
- Mathematica常用命令
- linux虚拟机如何加网卡,linux虚拟机添加新的网卡
- linux镜像包含数据库数据么,docker 镜像中包含数据库环境和运行环境
- 软件测试基础课程学习笔记6--测试执行的几点技巧
- Anaconda的下载地址
- [数字图像处理·冈萨雷斯 ] 图像文件格式
- 局域网内的服务器搭建(VMware)
- 移动端车牌识别SDK应用
- 【CANdelaStudio编辑CDD】-0.2-将CDD转换成ODX/PDX诊断描述文件
- DTD中的实体Entity
- 克孜勒苏柯尔克孜自治州谷歌高清卫星地图下载
- Android应用开发--MP3音乐播放器滚动歌词实现
- 一则软件需求有关的漫画
- simp服务器协议,Redis协议(RESP)规范
- 关于Tomcat黄叉的解决方案
- python创建_python 创建txt并写入Python基础1 Hello World!
- VTK Spline 样条曲线
- Origin_快速制图技巧
- VMware vCenter Server 7.0 完整安装教程
热门文章
- 数据结构之排序算法Java实现(2)——选择类排序之堆排序算法
- SpringMVC杂记(1) 使用阿里巴巴的fastjson
- Programming Ruby学习笔记一
- 记珠海一日游2008-5-2
- LoadRunner常见错误代码解决方案
- 解决Matlab画图直接保存.eps格式而导致图不全的问题
- 【白皮书分享】腾讯2022新职业教育洞察白皮书:“职”成机遇,“育”见未来.pdf...
- 自然语言处理技术在推荐系统中的应用和发展(附交流视频和PPT下载链接)
- 全国职称计算机考试教程,全国职称计算机考试专用教程:Excel 2003 中文电子表格(附光盘)...
- 我为何选择Facebook广告