通过bash将一个大变量传递给diff命令

时间:2014-03-03 10:19:00

标签: linux bash diff

我正在编写一个在论坛网站目录上执行校验和(md5sum)的脚本。

这是一个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" yourmailaddress@yourdomain.com
else
    echo "no files have been changed"
fi

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如果你想把它保存在一个变量中你可以通过这样做来将变量作为文件描述符给予变量:

diff <(echo "$MAIL") "/root/scripts/forum_checkum_original.txt"