2017-09-13 112 views
0

我有一個問題。這是我家庭作業的一部分,我真的不知道該怎麼做。 我有一個存檔,其中包含目錄樹和一個名爲sumy.md5的文件。我必須搜索此樹中的每個文件,並檢查它們的校驗和是否也在sumy.md5文件中。如果他們是我必須將他們移動到另一個目錄。 我會很感激,如果有人能告訴我如何通過整個目錄,並檢查文件的校驗和是否也在文件中sumy.md5Unix。目錄中所有文件的校驗和及其子目錄

我到目前爲止試過的代碼。

for f in (find ./AA/* -type f) 
while read -r file; 
do 
b=$(md5sum $file | cut -d' ' -f1) 
if [ $a == $b ] then 
    echo "Found It" 
    else echo "File not found" 
fi 
done < sumy.md5 
+0

到目前爲止您嘗試過什麼?這聽起來像一個簡單的bash腳本將工作 – BurnsBA

+0

爲f(找到./AA/*-type f) 而讀取-r文件;做 B = $($的md5sum文件|切-d」'-f1) 如果[$ A == $ B] 然後 回聲 「發現」 其他 回聲 「找不到文件」 網絡 做< sumy.md5 –

+0

編寫代碼是作業的一部分。有時被忽視的是將問題分解成更小的部分的技巧。聽起來好像你的作業有幾個步驟:(1)瀏覽一個目錄樹,(2)檢查文件的md5,(3)決定是否移動文件,以及(4)移動文件。你有哪些部分有問題? – stealththeninja

回答

1

有一些問題,你的腳本。複製您的評論和格式:

# the following line has a syntax error (missing "$") 
# but it's also not used in the loop 
for f in (find ./AA/* -type f) 
# syntax error here trying to jump into the while loop 
while read -r file; do 

    b=$(md5sum $file | cut -d' ' -f1) 

    # the variable "a" is never defined 
    if [ $a == $b ] 
    then 
     echo "Found It" 
    else 
     echo "File not found" 
    fi 
done < sumy.md5 

以上似乎文件遍歷目錄(錯誤地),然後在sumy.md5文件的每一行迭代。如果從md5sum輸出md5內容,那麼你可能只需要使用--check選項,但如果不是,那麼使用類似grep的內容來搜索內容更容易。

for file in $(find ./AA/* -type f) 
do 
    b=$(md5sum $file | cut -d' ' -f1) 

    # "q" just exits with status code, 0 or 1 on found or not 
    # "i" says to ignore case 
    if grep -qi "$b" "sumy.md5" 
    then 
     echo "Found It" 
    else 
     echo "File not found" 
    fi 
done 

如果發現,使用類似cp --parents也許rsync要複製文件到任何目錄,這也將無需手動處理它創建所需的目錄結構。

+1

謝謝你,先生:)你的版本似乎更好,更容易。這真的很有幫助。我甚至沒有考慮過grep。我將學習如何使用正確的粘貼代碼格式,但我的考試即將到來,現在我沒有太多時間。還有一個問題。我還必須製作移動文件的符號鏈接。符號鏈接中的路徑必須是相對的。 –

相關問題