[Linux] 從 tgz (tar.gz) 檔中排除掉特定檔案,建立新的 tgz 檔案

[Linux] 從 tgz (tar.gz) 檔中排除掉特定檔案,建立新的 tgz 檔案

今天接到一個 repack 的任務,

要把一個 tgz (tar.gz) 壓縮檔裡的其中一個檔案刪除掉,

例如下面 build.tgz 中的 extra/setting_mac.zip:

testuser@localhost ~ $ tar -tf build.tgz

extra/
extra/setting.zip
extra/setting_mac.zip
extra/setting_linux.zip
test.bat

 

以前的話,我大概就只能用 tar xvf 先把 tgz 解開,

刪掉不要的檔案,再用 tar zcvf 壓回來,

不過那樣實在有點繁瑣…

 

在查 tar 的時候,意外的發現原來 tar 支援一種語法,

就是用 @ 指名某個 tar 檔,可以把這 tar 檔的內容當作來源使用,

再搭配 –exclude 參數,就可以直接建出一個排除掉特定檔案的 tgz 了。

 

舉例來說,下面的範例是將 build.tgz 的內容,

排除掉 extra/setting_mac.zip 後,壓縮成 build_new.tgz:

testuser@localhost ~ $ tar zcvf build_new.tgz --exclude=extra/setting_mac.zip @build.tgz

a extra/
a extra/setting.zip
a extra/setting_linux.zip
a test.bat

 

只要一行就搞定了,真的是很不錯的功能耶~^^

 

參考資料:gzip – How do I delete a single file from a tar.gz archive – Stack Overflow

(本頁面已被瀏覽過 888 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料