是否可以从 .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}"提取文件名的最后一个符号 - 如果它是斜杠,则它是一个目录,因此我们跳过它。查看便携式版本的评论。

相关内容