如何在仅存300G空间的dir1中将600G的test.tar压缩为test.tar.bzip且仅保留压缩文件
可行的解决方案
针对你在dir1目录下的情况(600G的test.tar,剩余300G空间,需要生成test.tar.bz2并仅保留该压缩文件),这里有几个稳妥的方法:
方法1:直接使用bzip2内置替换功能(最简便)
bzip2默认会压缩目标文件,并在压缩完成后自动删除原文件,完美匹配你的需求。执行命令:
cd dir1 bzip2 test.tar
这个命令会将test.tar压缩为test.tar.bz2,压缩完成后立即删除原tar文件。需要注意的是,压缩过程中会同时存在原文件和临时生成的压缩文件,所以需要确保压缩后的文件体积 ≤ 300G。一般来说,普通数据(文档、代码、常规文件)的bzip2压缩率能达到50%甚至更低,600G的tar包压缩后大概率会在300G以内,这个方法完全可行。
方法2:管道压缩+手动删除(更安全)
如果担心压缩过程中出现意外(比如空间不足中断),可以先将压缩结果输出到新文件,确认压缩完成后再删除原文件:
cd dir1 bzip2 -c test.tar > test.tar.bz2 && rm test.tar
-c参数让bzip2将压缩内容输出到标准输出,再重定向到test.tar.bz2。只有当压缩命令成功执行完成后,rm才会删除原文件,避免中途出错导致原文件丢失。
方法3:带进度显示的压缩(可选,方便监控)
如果你想实时看到压缩进度和速度,可以借助pv工具(大部分Linux发行版可通过包管理器安装):
cd dir1 pv test.tar | bzip2 > test.tar.bz2 && rm test.tar
pv会显示当前处理的字节数、速度和剩余时间,让你清楚压缩的进展。
备选方案:临时使用外部存储空间(极端情况)
如果你的tar包内容特殊,压缩后体积超过300G,那可以先利用外部存储(比如其他挂载的磁盘)完成压缩,再移回dir1:
# 假设/mnt/extra是有足够空间的外部挂载目录 cd dir1 bzip2 -c test.tar > /mnt/extra/test.tar.bz2 && rm test.tar && mv /mnt/extra/test.tar.bz2 .
这个方法能避开dir1的空间限制,适合压缩率极低的特殊场景。
内容的提问来源于stack exchange,提问作者Jcob
相关产品推荐
相关产品推荐

