在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
之前写过用perl删除Windows下的图片缓存缩略图(Thumbs.db)
不过那个只是针对单个的文件,使用unlink方法就可以了(未测试过只读文件删除的情况- -!),那如果要删除指定的一个文件夹,有三种方案: 1、循环文件夹里面的文件,然后逐一删除,再使用rmdir删除空目录 2、使用File模块,使用remove_tree方法 3、调用系统命令进行删除(这个在linux下处理的较好,windows下未进行测试)
我选择了第二种方案,使用File::Path模块,点击查看详情>>
之前对Perl的操作符总结的并不好,这里小结一下: 1、比较运算符 2、逻辑运算符 特殊说明:操作符和其命名在运算时是完全等价的,但是有不同的优先级。操作符有更高的优先级。例如 && 比 and 有更高的优先级。 3、单引号与双引号的区别 示例一: ;
'test';
得到的将是字符串”$test” 示例二: ;
;
将得到变量$test的值 “11111”
好的习惯是全部使用双引号(”),在需要转义的地方使用”\”
上面是注意事项,回到写代码的初衷,为了删除某一指定文件夹下面的 “.svn”目录以及“Thumbs.db”文件。 #!/usr/bin/perl
use strict;
use warnings;
'remove_tree';
5:
;
7: my $fileCount = 0;
8: my $folderCount = 0;
9:
10: sub del_handler {
11: my $path = $_[0];
12: my $handle;
13: my $subpath;
14:
if (-d $path) {
if (opendir($handle, $path)) {
while ($subpath = readdir($handle)) {
and !($subpath =~ m/^\.\.$/)) {
;
20:
if (-d $p) {
) {
;
24: remove_tree($p);
25: $folderCount++;
else {
27: del_handler($p);
28: }
) {
30: unlink($p);
31: $fileCount++;
;
33: }
34: }
35: }
36: closedir($handle);
37: }
38: }
39: }
40:
41: del_handler($path);
42:
;
;
上面的代码显示不太合理,因为把路径给写死了。如何在调用的时候,例如这样:perl del.pl path 就是path在调用的时候才传进去呢?用$ARGV[0] 就可以得到,调用之前判断一下。 #!/usr/bin/perl
use strict;
use warnings;
'remove_tree';
5:
6:
7: my $fileCount = 0;
8: my $folderCount = 0;
9:
10: sub del_handler {
11: my $path = $_[0];
12: my $handle;
13: my $subpath;
14:
if (-d $path) {
if (opendir($handle, $path)) {
while ($subpath = readdir($handle)) {
and !($subpath =~ m/^\.\.$/)) {
;
20:
if (-d $p) {
) {
;
24: remove_tree($p);
25: $folderCount++;
else {
27: del_handler($p);
28: }
) {
30: unlink($p);
31: $fileCount++;
;
33: }
34: }
35: }
36: closedir($handle);
37: }
38: }
39: }
40:
;
;
43:
44: del_handler($path);
45:
;
;
使用方法(同样适用于linux)cmd切换到pl文件的目录,如c:\perlApp,C:\perlApp>perl del_svn.pl C:\theme\defaultTheme\assets
当然删除文件和目录,使用windows自带的dos脚本更简单一些(存为bat双击运行即可): echo off
2: title 文件目录SVN标志清除工具
3:
4: :start
5: ::启动过程,切换目录
6: set pwd=%cd%
7: cd %1
echo 工作目录是:& chdir
9:
10: :input
11: ::获取输入,根据输入进行处理
12: set source=:
13: set /p source=确定要清楚当前目录下的svn信息吗?[Y/N/Q]
15:
22: goto input
23:
24: :clean
25: ::主处理过程,执行清理工作
26: @echo on
27: @for /d /r %%c in (.svn) do @if exist %%c ( rd /s /q %%c & echo 删除目录%%c)
28: @echo off
30: goto end
31:
32: :noclean
33: ::分支过程,取消清理工作
35: goto end
36:
37: :end
38: ::退出程序
但有时间这个bat并不能很好的完成工作,非得到未删除干净的目录下再次运行,有点繁琐(为什么出现这种现象,暂时未查到原因~ ~)
DOS下还有一个Copy文件的命令也比较有用:xcopy,例如: xcopy D:\Aptana_work\9917\search\* \\192.168.0.178\application\search\search\ /E /Y /D 后面/E /Y /D是参数,具体的说明可以在DOS下查看
如果使用php或是python来删除文件夹和文件的话,也能做的很好,我只是当作练练手。下面是php代码,写的一个测试例子(代码规整的并不好,接触php不久..) >
2:
3: <?php
4:
function deleteDir($path) {
if (is_dir($path)) {
7:
' 开始遍历文件夹...<br/>';
9:
if ($handle = opendir($path)) {
false) {
12:
) {
'/'.$file;
15:
, $file)) {
17: deleteHandler($path2);
18:
if (is_dir($path2)) {
if (rmdir($path2)) {
'删除成功!<br/>';
else {
'删除失败!<br/>';
24: }
25: }
if (is_dir($path2)) {
if (!rmdir($path2)) {
28: deleteDir($path2);
29: }
30: }
31: }
32:
33: }
34:
35: closedir($handle);
36: }
37:
else {
全部评论
专题导读
热门推荐
热门话题
阅读排行榜
|
请发表评论