問題
因爲程序生成的日誌很大,而通過壓縮可以達到10%的壓縮率,所以在程序結束時將日誌壓縮成gz包,這樣可以節省硬盤空間和傳輸效率。
實際使用中,把日誌放在了/tmp文件夾下,而程序不定在哪個文件夾下,所以一開始使用的壓縮命令行如下tar -czvPf /tmp/test.tar.gz /tmp/*.log
,打開壓縮包發現包內有全路徑,需要多次進入後才能看到log文件。這使操作略微不便。
嘗試
百度後,得知可以用-C /tmp
去除壓縮包內的全路徑的——嗯,用tar -czvPf /tmp/test.tar.gz -C /tmp aa.log bb.log
的確沒路徑了。
然後用tar -czvPf /tmp/test.tar.gz -C /tmp *.log
就報錯:找不到*.log
這文件。
在【Tar 壓縮時 -C *的問題】中提到,通配符是由Shell進行展開的,所以在tar命令執行前*.log已經被擴展成了aa.log bb.log
。
而這Shell通配符擴展需要在全路徑下或當前路徑下,因爲tar -czvPf /tmp/test.tar.gz -C /tmp *.log
這個中用的是相對路徑,所以在shell的當前路徑下擴展*.log
。
奇怪的是,如果Shell 在當前路徑擴展不了*.log
,怎麼還會把*.log
作爲參數傳給tar
呢。
所以還是使用cd /tmp && tar -czvf test.tar.gz *.log
更加地簡單明瞭了吧。
結論
去除包內全路徑,並且使用通配符,需要使用cd /tmp && tar -czvf test.tar.gz *.log
。