2015-05-14 62 views
1

在OSX上,我試圖創建一個目錄的tarball,並且隨時用gpg加密 並保持tar消息的輸出在日誌文件中爲 稍後分析。創建一個tarball,對其進行即時加密並將tar消息保存在一個日誌文件中

雖然焦油+ GPG對飛它很容易

tar zcvf - foo | gpg -e -r [email protected] -o foo.tgz.gpg 

到目前爲止,我無法登錄焦油的輸出(也許在 情況下,GPG一個)到一個日誌文件。

我試過的

tar | gpg | tee 
tar | gpg 2>&1 >(tee) 
tar | gpg > file.log 

任何幫助這裏的幾個組合?

乾杯 達維德

回答

1

2> file.log應該實現它。 如果你想teestderr流,並保持它去原目的地,就可以實現與

2> >(tee file.log >&2)

在您的例子:

tar zcvf - foo 2> >(tee file.log >&2) | gpg -e -r [email protected] -o foo.tgz.gpg 

你嘗試沒有成功因爲管道(|)僅將前一命令的stdout轉發給當前命令的stdin。當前命令(gpg)無權訪問前一個命令的stderrtar)。 stderr已經到達目的地(很可能是您的終端)。

2> >(command)管(毫不誇張>()創建下方未命名的,操作系統級管)stderr到的commandstdin。由於command是子進程,因此其stderr(#2)描述符將指向與父進程的stderr相同的文件。

0

問題是,當在行尾使用2>時,只會重定向第二個命令(gpg)stderr。如果你想(看起來)重定向tar命令stderr,你應該在管道前添加2> logfile,如下所示:

tar zcvf - foo 2> tar.log | gpg -e -r [email protected] -o foo.tgz.gpg 
相關問題