需要遍历目录及其所有子目录,以便在Perl中查找某些文件

时间:2017-02-09 01:37:47

标签: perl

我正在尝试遍历目录及其所有子目录,以查看这些目录中的文件是否具有特定大小。但我不确定@files数组中的文件是否仍然包含文件大小,因此我可以比较大小(即 - size< = value_size)。有人可以提供任何指导吗?

use strict;
use warnings;
use File::Find;
use DateTime;

my @files;
my $dt   = DateTime->now;  
my $date = $dt->ymd;
my $start_dir = "/apps/trinidad/archive/in/$date";


my $empty_file = 417;
find( \&wanted, $start_dir);
for my $file( @files )
{
  if(`ls -ltr | awk '{print $5}'`<= $empty_file)
  {
        print "The file $file appears to be empty please check within the    folder if this is empty"


  }
  else
  return;

}
exit;

sub wanted {
 push @files, $File::Find::name unless -d;
 return; 
} 

1 个答案:

答案 0 :(得分:2)

我认为您可以使用此代码而不是炮轰到awk。

(不明白为什么my empty_file = 417;是空文件大小。)

if (-s $file <= $empty_file)

另请注意,您缺少else分支的打开和关闭大括号。

(如果找到的第一个文件不是'空',则不确定为什么要'return'分支到return,因为return仅使用exit而无法执行任何操作从函数返回。)

return是不必要的,wanted函数中的#!/usr/bin/perl use strict; use warnings; use feature 'say'; use File::Find::Rule; my $dir = '.'; my @files = find( file => size => "<14", in => $dir); say -s $_, " $_" for @files; 是不合格的。

更新:可以使用File::Find::Rule解决方案。这是一个小程序,它捕获当前目录中所有小于14个字节的文件及其所有子目录。

AcquireTokenSilentAsync