我有一个名为“new”的 gzip 目录,其中包含其他目录和文件,我按以下方式压缩
gzip -cvr --no-name /path-to-directory/new > new.gz
我已将这个超过 700MB 的文件复制到另一个位置(在另一台服务器上),现在想解压它。因此,在新服务器上,我转到包含“new”的目录,然后使用
gzip new
结果是一个 880MB 的文件 - 没有目录或更小的文件。
我做错了什么?我该如何改正?
谢谢。
答案1
Gzip 压缩文件,而不是目录。如果要对目录进行 gzip 压缩,必须先创建 tarball。您可以一步创建 tarball 并将其压缩。
tar cvzf tarball.tar.gz directory/
(创建、详细、gZip、到此文件)
逆转这一过程
tar xvzf tarball.tar.gz
(提炼)
答案2
tar cf - directory | gzip -9c > foo.tar.gz
然后像以前一样复制此内容,然后执行相反的操作:
tar xzf foo.tar.gz
如果您使用 SSH 传输文件,则可以跳过存储和传输文件的中间步骤:
tar cf - directory | gzip -9c | ssh user@hostname "cd /destdir ; tar xzvf -"
如果生成的 tar 文件非常大,可能无法与未压缩的数据一起放入目标分区,那么这将特别有用。在这种情况下,使用 rsync 可能更好。
答案3
听起来你应该使用 tar (带有 gzip 选项):
# -z : pipe through gzip
# -cf : create file
tar -zcf new.tgz /path-to-directory
然后使用生成的 new.tgz 文件:
# z : gzip
# x : extract
# p : keep permissions
tar zxpf new.tgz
编辑
那么 gzip -r 有什么用呢? – jeffp 37 分钟前
gzip 是一个流压缩器 - 它实际上并不会查看压缩的内容,除了它需要缩小的内容之外,所以它没有目录的概念。
顺便说一句,我发现 bzip2 的压缩效果比 gzip 好得多 - 尽管速度较慢。
# -j : pipe through bzip2
# -cf : create file
tar -jcf new.tar.bzip2 /path-to-directory
bunzip2 new.tar.bzip2