
我有一個.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}"
提取檔案名稱的最後一個符號 - 如果它是斜杠,則它是一個目錄,因此我們跳過它。查看可攜式版本的評論。