Linux

是否可以從 .tar 中刪除已經解壓的文件?

  • May 29, 2021

我有一個.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}"提取文件名的最後一個符號 - 如果它是斜杠,它是一個目錄,所以我們跳過它。檢查攜帶式版本的評論。

引用自:https://unix.stackexchange.com/questions/651567