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. 清空目录及目录中的所有文件相关推荐

  1. 使用Shell遍历目录及其子目录中的所有文件方法

    #! /bin/bashfunction read_dir(){for file in `ls $1` #注意此处这是两个反引号,表示运行系统命令doif [ -d $1"/"$f ...

  2. linux c 读取目录及其子目录下所有.jpg文件的文件名(无后缀)

    此程序用来生成<yolo v2中VOC数据生成labels所需的图片文件名文档>train.txt linux c 读取目录及其子目录下所有.jpg文件的文件名:   http://www ...

  3. Angular应用中tsconfig.json文件配置说明及配置全局路径映射

    tsconfig.json文件配置说明 1. tsconfig.json文件中的选项配置 2. 配置全局路径映射 1. tsconfig.json文件中的选项配置 TypeScript编译器配置文件的 ...

  4. Linux中 mv(文件移动)

    mv命令的功能有以下两种: source targetmv 参数1 参数2 1.对文件或目录重新命名 如果源文件和目标文件在同一个目录下,mv的作用就是改文件名. 2.将文件从一个目录移到另一个目录中 ...

  5. linux的tmp目录不会清空,关于Linux系统中/tmp目录的清除问题

    关于Linux系统中/tmp目录的清除问题 相当悲剧的问题是,之前保存在/tmp目录中的一些数据丢了.现在发现已经是第二次发生了,前一次以为是其他人误操作删除的,今天才发现这个和系统有关系.完全是因为 ...

  6. 网络安全系列之四十六 在IIS6中配置目录安全性

    Web站点默认是允许匿名访问的,某些特殊网站(或者虚拟目录)如果要求用户提供账号和密码才能访问,或者限定某些IP地址能(或不能)访问,那可以通过在Web站点属性的"目录安全性"选项 ...

  7. Skype For Business 2015实战系列2:安装活动目录

    Skype For Business 2015实战系列2:安装活动目录 今天开始我们就正式进入了Skype For Business 2015的部署阶段,在部署开始之前,我们先来看一下我们本次的环境列 ...

  8. linux 多级目录查找,Linux如何在多级目录中查找某个文件

    Linux在多级目录中查找某个文件的方法:find /dir -name filename.ext du -a | grep filename.ext locate filename.ext Linu ...

  9. maven只打包java目录_ssm项目中maven对resources目录打包的路径_默认路径,自定义路径...

    博客引用处(以下内容在原有博客基础上进行补充或更改,谢谢这些大牛的博客指导): ssm项目打包后mybatis的mapper.xml文件没有放进去 问题出现的原因: ssm项目打包后mybatis的m ...

最新文章

  1. 2015最流行的Android组件、工具、框架大全
  2. Mathematica常用命令
  3. linux虚拟机如何加网卡,linux虚拟机添加新的网卡
  4. linux镜像包含数据库数据么,docker 镜像中包含数据库环境和运行环境
  5. 软件测试基础课程学习笔记6--测试执行的几点技巧
  6. Anaconda的下载地址
  7. [数字图像处理·冈萨雷斯 ] 图像文件格式
  8. 局域网内的服务器搭建(VMware)
  9. 移动端车牌识别SDK应用
  10. 【CANdelaStudio编辑CDD】-0.2-将CDD转换成ODX/PDX诊断描述文件
  11. DTD中的实体Entity
  12. 克孜勒苏柯尔克孜自治州谷歌高清卫星地图下载
  13. Android应用开发--MP3音乐播放器滚动歌词实现
  14. 一则软件需求有关的漫画
  15. simp服务器协议,Redis协议(RESP)规范
  16. 关于Tomcat黄叉的解决方案
  17. python创建_python 创建txt并写入Python基础1 Hello World!
  18. VTK Spline 样条曲线
  19. Origin_快速制图技巧
  20. VMware vCenter Server 7.0 完整安装教程

热门文章

  1. 数据结构之排序算法Java实现(2)——选择类排序之堆排序算法
  2. SpringMVC杂记(1) 使用阿里巴巴的fastjson
  3. Programming Ruby学习笔记一
  4. 记珠海一日游2008-5-2
  5. LoadRunner常见错误代码解决方案
  6. 解决Matlab画图直接保存.eps格式而导致图不全的问题
  7. 【白皮书分享】腾讯2022新职业教育洞察白皮书:“职”成机遇,“育”见未来.pdf...
  8. 自然语言处理技术在推荐系统中的应用和发展(附交流视频和PPT下载链接)
  9. 全国职称计算机考试教程,全国职称计算机考试专用教程:Excel 2003 中文电子表格(附光盘)...
  10. 我为何选择Facebook广告