【问题标题】:How can I get all files in a directory, but not in subdirectories, in Perl?如何在 Perl 中获取目录中的所有文件,而不是子目录中的文件?
【发布时间】:2010-12-22 01:14:10
【问题描述】:

如何在目录列表中找到所有符合特定条件(-M,修改天数)的文件,而不是在其子目录中?

我想使用 File::Find,但看起来它也总是转到子目录。

【问题讨论】:

  • 什么是“某些标准”?大小、权限、名称、日期等等?
  • @Manni: -M,修改天数

标签: perl file find


【解决方案1】:
@files = grep { -f && (-M) < 5 } <$_/*> for @folders;

【讨论】:

  • 在同一个文件上执行多个 -X 时,除了第一个文件之外,您可以使用 _ 作为“文件名”以重用相同的 stat 返回
【解决方案2】:

readdirFile::Slurp::read_dirgrep 结合使用。

 #!/usr/bin/perl

use strict;
use warnings;

use File::Slurp;
use File::Spec::Functions qw( canonpath catfile );

my @dirs = (@ENV{qw(HOME TEMP)});

for my $dir ( @dirs ) {
    print "'$dir'\n";
    my @files = grep { 2 > -M and -f }
                map { canonpath(catfile $dir, $_) } read_dir $dir;
    print "$_\n" for @files;
}

【讨论】:

    【解决方案3】:

    您可以在 'wanted' 函数中设置 File::Find::prune 以跳过目录树。添加类似 $File::Find::prune = 1 if( -d && $File::Find::name ne ".");

    【讨论】:

    • 如果您不想进行深度优先搜索,请不要使用深度优先搜索工具。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2011-08-04
    • 2019-08-14
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多