压缩并删除存储空间有限的原始目录

压缩并删除存储空间有限的原始目录

在我的 3 TB 外部硬盘驱动器上,我有一个 2.7 TB 目录,其中包含相对较小的文件。我想压缩这个 2.7 TB 目录并将其删除以仅保留压缩版本。问题是我没有足够的存储空间来首先存储ziprm压缩目录。

有没有办法解决这个问题,或者我是否必须获得更多的存储空间来进行操作?

答案1

您可以尝试--remove-files使用 tar 参数。假设您想压缩目录 FOO 上的所有内容,您将: tar -czf FooCompressed.tar.gz --remove-files FOO

参数解释:

  • c: 创建 TAR
  • z:使用GZIP压缩,您可以切换到-jBZIP2或-JLZMA(xz)
  • f:输出到文件而不是STDOUT
  • 删除文件:不言自明

答案2

如果目录中的最大文件小于 300GB(可用空间量),最简单的选择是单独压缩文件而不是创建存档;就像是

find directory -type f \! -name '*.xz' -print0 | xargs -0 xz -9

directory将以压缩级别 9压缩所有未压缩的文件。xz这将一次用相应的压缩版本替换一个文件,并添加.xz扩展名(因此foo.txt变为foo.txt.xz)。

事实上,即使最大的文件大于可用空间,只要您有足够的小于可用空间的文件,这也可以工作:首先压缩较小的文件,这将逐渐释放越来越多的空间,直到(希望)您有足够的可用空间来处理最大的文件。

答案3

我通常从不制作 zip 文件,所以我不是专家,但zip默认情况下看起来只是将文件添加到存档中,所以类似 (未经测试的- 包含一个rm命令 = 可能危险的- 在拿你的数据冒险之前先测试一下自己): for f in $(ls --sort=size --reverse); do zip -9 archive.zip $f; rm $f; done 在目录中,可能可以做到。

答案4

将这些 bash 函数添加到你的 ~/.bashrc 中:

xzd()  { find $1 -type f  \! -name '*.xz' -exec xz -9 {} \; ; }
xzdv() { find $1 -type f  \! -name '*.xz' -print -exec xz -9 {} \; ; }

uxzd() { find $1 -type f  -name '*.xz' -exec unxz -9 {} \; ; }

然后从命令行您可以执行以下操作:

mac@challenger:~/views$ du -sk HelloWorld/
236 HelloWorld/

mac@challenger:~/views$ xzd HelloWorld
mac@challenger:~/views$ du -sk HelloWorld
116 HelloWorld

mac@challenger:~/views$ uxzd HelloWorld
mac@challenger:~/views$ du -sk HelloWorld
236 HelloWorld

xzdv 是 xzd 的更详细形式,并在压缩时回显每个文件

mac@challenger:~/views$ xzdv ./HelloWorld/
./HelloWorld/.cproject
./HelloWorld/src/helloworld.c
...
mac@challenger:~/views$

(纳入评论中的建议 - 谢谢!!!)

相关内容