0

我一直在努力解决这个问题,但无论我尝试什么,它似乎都没有按我的意愿工作。基本上缺少的东西是 grep 在找到匹配项时没有列出文件名(我认为这是 -H 标志应该做的事情?)并且 uuencode 似乎不想将文件附加到电子邮件。我已经尝试过 uuencode 和 cat ,但我无处可去。

有谁知道这里可能有什么问题?

for i in `ls SystemOut_*[0-9].log`; do
    grep -inEH '^\[.*(error|exception)' $i >> scannedErrors.txt;
    mv "$i" "${i%.log}"_scanned.log;
done
if [[ -s scannedErrors.txt ]]; then
    uuencode scannedErrors.txt | mailx -s "Scanned Logfile Errors" someone@somewhere.com < Message.txt;
fi
/bin/rm scannedErrors.txt;
4

2 回答 2

0

uuencode scannedErrors.txt期待输入 - 当仅使用一个选项调用时,它将该选项视为要包含在输出中的文件名,而不是要读取的文件名。所以要么做cat scannedErrors.txt | uuencode scannedErrors.txt要么uuencode scannedErrors.txt scannedErrors.txt

我不一定认为该位有任何问题,但在其中放置一个以确保您找到所需的内容grep可能很有用。cat scannedErrors.txt你也可以做grep ... SystemOut_*[0-9].log而不是 for 循环,这将成为-H默认值,但你可能仍然需要 for 循环来重命名事物,除非你碰巧有rename可用的脚本(一个允许通过正则表达式创造性地重命名的 perl 脚本)。

于 2012-06-20T13:46:52.663 回答
0

尝试 :

{ cat scannedErrors.txt|uuencode scannedErrors.txt;cat Message.txt;}|mailx -s "Scanned Logfile Errors" someone@somewhere.com

因为 | 之间有冲突 和 <

于 2012-06-20T14:58:12.063 回答