[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 Floder
	opendir (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 Floder
	opendir (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. 清空目录及目录中的所有文件,布布扣,bubuko.com

时间: 2024-10-11 13:11:42

[Perl系列—] 1. 清空目录及目录中的所有文件的相关文章

找出目录中相同的文件

这个功能,笔者是使用python实现.执行脚本后,根据提示手动输入目录的路径.脚本计算该目录及其子目录中所包含文件的md5值,比对md5值,从而打印出md5值相同的文件路径. python完整脚本如下: # -*- coding: utf-8 -*- def calmd5(filename): import hashlib f = open(filename,'rb') m = hashlib.md5() m.update(f.read()) hash = m.hexdigest() retur

网络安全系列之四十五 在IIS6中配置虚拟目录

一个网站中的所有网页和相关文件都要存放在主目录下,为了对文件进行归类整理,也可以在主目录下面建立子文件夹,分别存放不同内容的文件,例如一个网站中,新闻类的网页放在主目录的news文件夹,技术类的网页文件放在主目录的tech文件夹,产品类的网页文件放在products文件夹等,这些直接存放在主目录下的子文件夹都称为物理目录. 如果物理目录的数量很多,主目录的空间可能会不足,因此也可以将上述文件存放在其它分区或者其它计算机上,而用户访问时上述文件夹在逻辑上还属于网站之下,这种归属于网站之下的目录称为

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

Web站点默认是允许匿名访问的,某些特殊网站(或者虚拟目录)如果要求用户提供账号和密码才能访问,或者限定某些IP地址能(或不能)访问,那可以通过在Web站点属性的"目录安全性"选项卡中进行相关设置以完成上述要求. (1)匿名用户 在"身份验证方法"界面中可以看到Web服务器默认启用了匿名访问功能,即客户端在访问Web站点时无需进行身份验证.匿名用户在Web服务器中也要有一个相对应的用户账号,这个用户账号是在安装IIS时一并创建的,用户名为"IUSR_计算机

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

Skype For Business 2015实战系列2:安装活动目录 今天开始我们就正式进入了Skype For Business 2015的部署阶段,在部署开始之前,我们先来看一下我们本次的环境列表: 计算机名 IP地址 角色 备注 DC 192.168.1.20 AD DS   Mail 192.168.1.22 Exchange 2013   Front01 192.168.1.25 SFB前端   Front01 192.168.1.26 SFB前端   SQL01 192.168.1

C#程序员学习Android开发系列之Android项目的目录结构

今天开始正式学习Android开发的种种细节,首先从最基本的概念和操作学起. 首先看一下Android项目的目录结构. 这是我随便建立的一个test项目,我们重点关注一下几个方面的内容: 1.src目录:存放java源代码的目录,里面建立一个包,包里面有4个java源文件(分别都继承自Activity).由于java要求比较严格,因此要求类名与文件名一致. gen(Generated Java Files)目录:自动产生Java源文件的目录,是由工具自动生成的,一般不需要自己修改.里面主要有一个

pluskid&#39;SVM系列笔记(可当做目录对照看)

0.训练数据对分类器性能的影响 原文链接:http://blog.pluskid.org/?p=223 1.训练数据的不平衡性对分类器性能的影响(precision .accuracy.error rate 等) 2.SVM(support vector machine)通过hyperplane切分数据,so we can have lots of reasonable hyperplane. 对于需要复杂曲线才能切分的边界:将数据映射到高维空间,这样通常都能转化成可用线性边界切分的情况, us

Skype For Business 2015实战系列9:准备活动目录

Skype For Business 2015实战系列9:准备活动目录 Skype For Business Server 2015和域控制器紧密结合.部署Skype For Business Server 2015的时候需要对Active Directory架构进行扩展.之所以扩展Active Directory架构其实就是在Active Directory中增加一些类和属性,以满足其部署的需求.闲言少叙,接下来我们进入正题,来看一下今天的内容: 对于Active Directory的准备过程

perl readdir函数详解 获取目录下文件

perl readdir函数详解 2013年12月30日  Perl基础  共 763字 字号 小 中 大  暂无评论  阅读 4,384 次 readdir函数从一个用 opendir 打开的目录句柄读取目录记录也就是文件名.用法如下: readdir DIRHANDLE 在标量环境中,readdir函数返回下一个目录记录,否则,它返回undef.在列表环境中,它返回在该目录中所有剩下的记录,如果剩下没有记录了,那么这个返回可能是一个空列表.比如: opendir(THISDIR, ".&qu

IOS中获取各个文件的目录路径的方法和NSFileManager类

转自:http://blog.sina.com.cn/s/blog_5fb39f910101di92.html IOS中获取各种文件的目录路径的方法 iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory()), 手动保存的文件在documents文件里 Nsuserdefaults保存的文件在tmp文件夹里 1.Documents 目录:您应该将所有