Tar 壓縮時通配符的問題

問題

因爲程序生成的日誌很大,而通過壓縮可以達到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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章