2012-06-28 112 views
0

我正在尋找目錄中的文件。如果我找不到該文件,我想將該文件的名稱發送到一個數組,以便到循環完成時,我將有一個未找到的文件的數組。我如何在Perl中編碼?如何將一個變量的值添加到數組中?

foreach $missing (@miss) { 
    chomp $missing; 
    ($a,$b)=split(/\.m_inproc./,$missing); 

    @find = `find /home1/users/virtual/ -name .m_inproc.$b`; 
    $find_size = scalar @find; 
    $flag = "/home1/t01jkxj/check_st/flags/$b"; 

    if ($find_size < 1 && -e $flag) { 
     $doit = `$b > @re_missing`; 
    } 
} 

這是我的搜索代碼,如果它沒有找到一個文件($find_size小於1),有一個標誌文件(這意味着我們這樣做過搜索)。我想將該變量$b(文件名)寫入數組。顯然,我的語法當前($doit = $b > @re_missing;)是不正確的。它會是什麼?謝謝!

+0

「@ missing」是什麼? 「@ missing」元素是文件的完整路徑嗎?你期望這些文件已被移動?或者,完整的路徑不正確? –

回答

1

如何:

push @re_missing, $b 

順便說一句,使用$ a和$ b是不好的形式。這些是sort比較主體中使用的隱式聲明變量。

0

不確定您的代碼的完整上下文,但是此代碼與您已經實現的文件大小檢查相結合應該會使您處於正確的軌道上。這裏的簡短答案是「USE PUSH」,但我覺得自己喜歡編碼,所以如果這會導致不必要的閱讀和「使用推送」就足夠了。

#usr/bin/perl 
use strict; 
use warnings; 

my @files = ("tester.txt", "pooter.txt", "output.txt"); 
my @notfound; 


foreach(@files) 
{ 
    if (!(-e $_)) 
    { 
     push (@notfound, $_); 
    } 
} 

foreach(@notfound) 
{ 
    print $_; 
} 
0
my @missing_files = grep { ! -e } @files_to_search_for; 
+1

除了我認爲'find'也在子目錄下搜索。這是一個簡單的基於'File :: Find'的解決方案。 –

相關問題