1. 程式人生 > >linux下不解包檢視tar包檔案內容

linux下不解包檢視tar包檔案內容

為減少日誌檔案佔用的空間,很多情況下我們會將日誌檔案以天或周為週期打包成tar.gz 包儲存。雖然這樣做有利空間充分利用,但當我們想檢視壓縮包內的內容時確很不方便。如果只是一個tar.gz檔案,可以將其解壓,再利用grep、awk或vi等工具檢視或處理。不過如果有一個月或都一年的日誌需要找出某些關鍵詞的行,一個一個的解壓,然後再看,是不是很不現實。那有沒有什麼簡便的方法,可以不解壓獲得我們想要的內容呢?

答案是肯定的,可以利用zutils工具包實現。Zutils 是一組用來處理壓縮檔案的工具集,支援的壓縮檔包括:gzip, bzip2, lzip, and xz. 當前版本提供的命令有:zcat, zcmp, zdiff, and zgrep 。

直接檢視tar.gz壓縮包裡的內容可以使用:

zcat xxx.tar.gz

但是想要在其後面直接加管道grep處理呢?如下:

[root@back tmp]# zgrep 'footbar.js' vsftpd.tar.gz
Binary file (standard input) matches
[root@back tmp]# zcat vsftpd.tar.gz|grep 'footbar.js'
Binary file (standard input) matches

發現不論是使用zgrep還是使用zcat後再grep都會報錯。難道不行?當然不是。檢視下zgrep或grep的幫助文件。有這麼一行:

--binary-files=text

加上該引數呢?

zcat vsftpd.tar.gz|grep --binary-files=text 'footbar.js'或
zgrep --binary-files=text 'footbar.js' vsftpd.tar.gz

發現可以檢視檔案內容了 ! 為什麼呢?

因為我壓縮是用的tar czvf引數進行的打包。其實現上經過tar與gzip兩層壓縮。導致其直接不能管道。如果不解包想直接檢視壓縮包裡包含了那些檔案呢?可以用下面的命令:

[root@back tmp]# tar tvf vsftpd.tar.gz
-rw------- root/root 441453365
2013-06-03 16:19:56 vsftpd.log