我需要解压一个大档案,但问题是我没有足够的磁盘空间来容纳压缩和提取的文件。是否有选项可以在解压后立即从存档中删除压缩文件?如果是这样,怎么办?目前我的文件是通过 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 存档最后仅包含元数据,可以删除。