2017-02-09 44 views
0

我正在嘗試遍歷目錄及其所有子目錄,以查看這些目錄中的文件是否具有一定的大小。但我不確定@files數組中的文件是否仍然包含文件大小,因此我可以比較大小(即 - 大小< = value_size)。有人可以提供任何指導嗎?需要通過目錄及其所有子目錄遍歷以在Perl中查找某個文件

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; 
} 

回答

2

我想你可以使用這段代碼而不是對awk進行炮擊。

(不明白爲什麼my empty_file = 417;是一個空文件大小)。

if (-s $file <= $empty_file) 

另請注意,您遺漏了else分支的打開和關閉大括號。

(如果第一個文件發現不是'空',則不確定爲什麼要'return'分支到return,因爲return僅用於從函數返回,所以它不執行任何操作。

exit是不必要的,wanted函數中的return是不必要的。

更新: A File::Find::Rule解決方案可以使用。這是一個小程序,可捕獲當前目錄中所有小於14個字節的文件及其所有子目錄。

#!/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; 
+0

使用逗號代替'=>'編輯 –

+0

謝謝克里斯我沒有考慮用於檢查大小的-s。這確實使它更清晰得多! – SaintClaire33

相關問題