如何在提取存档时删除压缩文件?

如何在提取存档时删除压缩文件?

我需要解压一个大档案,但问题是我没有足够的磁盘空间来容纳压缩和提取的文件。是否有选项可以在解压后立即从存档中删除压缩文件?如果是这样,怎么办?目前我的文件是通过 tar 命令压缩的,但我可能可以将它们重新打包为我的其他服务器上的任何其他类型。

答案1

笔记。如果您的文件被压缩,这将不起作用!想都别想!!

既然这样,我们就这样做吧。

我创建了一个简单的脚本,它向后遍历 tar 存档,提取文件,然后将其从存档中删除。我不确定这个文件是否可以与其中的目录结构一起使用,并且我只使用“平面”tar 存档对其进行了测试。

脚本是:

#!/bin/bash

archive="$1"

while true
do
        file=$(tar --list -f tar.tar | tail -n 1)
        if [ -z "$file" ]; then
                break
        fi
        tar --extract -f "$archive" "$file" && tar --delete -f "$archive" "$file"
done

警告:我已经对此进行了测试。但我不能保证上面的脚本不会跳过某些文件、无法工作,甚至可能会使您的计算机变成烤面包机。使用风险自负!

这是我的测试:

:/mnt$ ls -l
total 2445456
-rwxrwxr-x 1 va va        201 окт 28 08:50 do.sh
-rw-rw-r-- 1 va va 2504140800 окт 28 08:45 tar.tar
:/mnt$ df -h |grep /mnt
tmpfs                     3,0G  2,4G  684M  78% /mnt
:/mnt$ ./do.sh tar.tar
:/mnt$ df -h |grep /mnt
tmpfs                     3,0G  2,4G  684M  78% /mnt
:/mnt$ ls -lh tar.tar 
-rw-rw-r-- 1 va va 10K окт 28 08:53 tar.tar

tar 存档最后仅包含元数据,可以删除。

相关内容