当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能删除Perl中的这个空目录?

如何解决《为什么我不能删除Perl中的这个空目录?》经验,为你挑选了2个好方法。

我正在从http://www.perlmonks.org/index.pl?node_id=217166转换linux脚本,具体如下:

#!/usr/bin/perl -w
use strict;
use Getopt::Std;
use File::Find;

@ARGV > 0 and getopts('a:', \my %opt) or die << "USAGE";
# Deletes any old files from the directory tree(s) given and
# removes empty directories en passant.
usage: $0 [-a maxage] directory [directory ...]
       -a  maximum age in days, default is 120
USAGE

my $max_age_days = $opt{a} || 120;

find({
    wanted => sub { unlink if -f $_ and -M _ > $max_age_days },
    postprocess => sub { rmdir $File::Find::dir },
}, @ARGV);

我的尝试是:

#!/usr/bin/perl -w
use strict;
use Getopt::Std;
use File::Find;


@ARGV > 0 and getopts('a:', \my %opt) or die << "USAGE";
# Deletes any old files from the directory tree(s) given and
# removes empty directories en passant.
usage: $0 [-a maxage] directory [directory ...]
       -a  maximum age in days, default is 120
USAGE

my $max_age_days = $opt{a} || 120;

find({
    wanted => sub { unlink if -f $_ and -M _ > $max_age_days },
#    postprocess => sub { rmdir $File::Find::dir },
    postprocess => sub {
                        my $expr = "$File::Find::dir";
                        $expr =~ s/\//\\/g;      # replace / with \
                        print "rmdir $expr\n";
                        `rmdir $expr`;
                        },
}, @ARGV);

但是,当脚本尝试删除一个目录,说明该目录正由另一个进程使用时(当它不是时)时,我收到错误.有任何想法吗?我正在使用ActiveState 5.10在Windows Server 2003 SP2 64位上运行该脚本.

谢谢!



1> dsm..:

从这份文件

后期过程

该值应该是代码引用.它在离开当前处理的目录之前调用.它在void上下文中调用,没有参数.当前目录的名称位于$ File :: Find :: dir中.此挂钩对于汇总目录(例如计算其磁盘使用情况)非常方便.当follow或follow_fast生效时,后处理是一个无操作.

这意味着当您尝试删除目录时,您自己的代码仍在使用该目录.尝试构建一个名称列表,并在调用find之后迭代它.

另一种可能的解决方案是使用该no_chdir选项以避免找到使用您要删除的目录.

编辑:此评论也是相关的,所以我将它推广到主答案的正文:

除此之外:这里的问题是在Linux上可以删除正在使用的文件和目录,而在Windows上则不能.这就是为什么它没有修改不起作用的原因.- Leon Timmermans



2> Powerlord..:

只需几点说明:

    你不需要将/翻到\.Perl知道/是一个目录分隔符,即使在Windows上也是如此.

    rmdir是一个内置的Perl,你不需要用反引号来调用它.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有