是否可以從 .tar 中刪除已解壓縮的檔案?

是否可以從 .tar 中刪除已解壓縮的檔案?

我有一個.tar檔案佔用了大約 70% 的磁碟空間,我需要將其解壓縮到同一磁碟上。該tar命令是否可以選擇刪除在此過程中已解壓縮的文件,以便它們不再佔用空間?該--delete選項似乎能夠從.tar存檔中刪除特定文件,但是有沒有辦法告訴tar始終刪除剛剛解壓縮的最後一個文件?這樣,隨著解壓縮檔案大小的增加,.tar大小最終會一直減小到零。

此外,如果該過程被中斷,它可以從離開的地方繼續,因為只有解壓縮的文件仍然存在於.tar.

答案1

#! /bin/bash
test ! -e "$1" && echo "Run with a tar archive" && exit
tar --list -f "$1" | tac | while IFS= read -r fname; do
    test "${fname: -1}" = '/' && continue # skip directories
    tar --extract -f "$1" "$fname" || exit 1 # let's stop in case we can't extract a file
    tar --delete  -f "$1" "$fname" || exit 2 # just in case
done
test "$?" = "0" && tar xf "$1" # restore directories timestamps

tac用於反轉檔案的順序,以便 tar 在刪除檔案後不需要重寫整個檔案 - tar 只需要截斷存檔。我已經在幾個文件上測試了該腳本 - 它工作得很好,儘管對於包含大量小文件的存檔來說可能會非常慢。

"${fname: -1}"提取檔案名稱的最後一個符號 - 如果它是斜杠,則它是一個目錄,因此我們跳過它。查看可攜式版本的評論。

相關內容