Linux
是否可以從 .tar 中刪除已經解壓的文件?
我有一個
.tar
文件佔用了大約 70% 的磁碟空間,我需要將它解壓到同一個磁碟上。該tar
命令是否可以選擇刪除在此過程中已經解壓縮的文件,以便它們不再佔用空間?該--delete
選項似乎能夠從.tar
存檔中刪除特定文件,但是有沒有辦法告訴tar
總是刪除剛剛解壓的最後一個文件?這樣,隨著解壓文件大小的增加,.tar
大小最終會一直減小到零。此外,如果該過程被中斷,它可以從它離開的地方繼續,因為只有解壓縮的文件仍然存在於
.tar
.
#! /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}"
提取文件名的最後一個符號 - 如果它是斜杠,它是一個目錄,所以我們跳過它。檢查攜帶式版本的評論。