2014-03-03 74 views
0

我正在寫一個腳本,它在論壇的Web目錄上執行校驗和(md5sum)。通過bash傳遞一個大的變量到diff命令

這是一個bash腳本。想法是對目錄中的所有文件執行校驗和,然後將其與具有校驗和列表的文本文件進行比較。

如果我把它傳遞到一個文本文件中,然後在文本文件和我的已知校驗和列表之間做一個diff命令,但我希望它沒有寫入文本文件,然後必須在腳本的末尾刪除文本文件,因此爲什麼我使用的是可變

下面的腳本失敗,出現錯誤: 在/ usr/bin中/ DIFF:參數列表過長

cd /var/www/html/forum/ 


VAR1=$(find . -type d \(-name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "files\|that\|change") 

/usr/bin/diff "${VAR1}" "/root/scripts/forum_checkum_original.txt" 

如何我可以傳遞我的變量,以便我可以在其上運行diff命令嗎?

編輯:與用戶devnull的幫助(再次感謝你),這裏是完成和工作的腳本:

cd /var/www/html/forum/ 

MAIL=$(/usr/bin/diff <(find . -type d \(-name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "files\|that\|change") /root/scripts/forum_checkum_original.txt) 

if [[ -n $(/usr/bin/diff <(find . -type d \(-name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "files that change") /root/scripts/forum_checkum_original.txt) ]]; then 
echo "$MAIL" | mail -s "Forum Checksum" [email protected] 
else 
    echo "no files have been changed" 
fi 

回答

1

diff比較文件,而不是變量。改爲使用流程替換。

的你正在試圖做的是什麼等價物:

/usr/bin/diff <(find . -type d \(-name store_sitemap \) -prune -o -type f -exec md5sum {} \; | grep -v "bidorbuy.log") /root/scripts/forum_checkum_original.txt 
+0

謝謝。那已經很完美了 – rezizter

0

如果你想這樣做,以保持它在你能給差異變量作爲文件描述符的變量:

diff <(echo "$MAIL") "/root/scripts/forum_checkum_original.txt" 
相關問題