gpt4 book ai didi

linux - 使用 Perl 如何清理没有文件的剩余目录?

转载 作者:太空宇宙 更新时间:2023-11-04 04:38:58 24 4
gpt4 key购买 nike

有一个特定的目录被某些程序用作临时/临时目录。
例如。 /a/b/c/work
在工作中可能存在多个分层目录,例如

/a/b/c/work/  
\d1/
\d1.1
\d2
\d2.2

我想要的是清理这个工作目录,因为还有剩余的文件占用空间。
本质上我需要删除叶子目录为空的所有工作子目录。
因此,如果 d1.1 为空但 d2.2 有文件,则删除 d1 下的所有内容(包括 d1)但不删除 d2。
在 Perl 中执行此操作的最干净/标准的方法是什么?
我想使用带反引号的解决方案,例如rm -rf 等,但我认为可能有一些比 ls 后面跟着 rm 的编码序列更好的方法

注意:只是为了清楚起见。我想要一个 Perl 解决方案,因为这不是一次性的事情,我不想每次都手动执行此操作

最佳答案

如果你使用find命令这样你就可以实现它。

find /path/to/dir -empty -type d -delete

哪里,

-empty 仅查找空文件并确保它是常规文件或目录。

-type d 仅匹配目录。

-delete 删除文件。

始终将 -delete 选项放在 find 命令的末尾,因为 find 命令行被计算为表达式,因此首先放置 -delete 将使 find 尝试删除指定起点以下的所有内容。

要在 shell 脚本中自动执行此操作,请遵循以下代码:

path=`pwd`

find $path -empty -type d -delete

或者您可以提供某些输入作为 shell 脚本的参数,例如 myShell.sh/path/to/mydir 在这种情况下,以下代码将完成工作,

$path=$1

find $path -empty -type d -delete

如果你真的想使用perl,你可以如下找到答案

use strict;
use warnings;

use File::Util;

my $path = '...';

my $fu = File::Util->new();
my @all_dirs = $fu->list_dir($path, '--recurse', '--dirs-only');
my @empty_dirs = grep { not $fu->list_dir($_) } @all_dirs;

也是一个简短的方法

perl -MFile::Find -e"finddepth(sub{rmdir},'.')"

解释得很好here .

关于linux - 使用 Perl 如何清理没有文件的剩余目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26955895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com