如何动态地对输出进行tar / untar


27

做以下事情的惯用方法是什么

  • tar到stdout
  • 从stdout读取此tar输出并将其解压缩到其他文件夹。

我的解决方案是 tar --to-stdout .. | tar -C somefolder -xvf -

但是也许有更多惯用的方法可以做到这一点。

Answers:


34

同样的-f -选项也适用于脱皮。

tar -cf - something | tar -C somefolder -xvf -

GNU tar默认使用stdio:

tar -c something | tar -C somefolder -xv

rsync也很流行。

rsync -av something/ somefolder/

9

只是在这里添加另一个用例。我的系统上的大型目录结构几乎没有磁盘空间,因此想要在另一台具有大量空间的计算机上以目录结构的tar.gz文件结尾。

tar -czf - big-dir | ssh user@host 'cat > /path/to/big-dir.tar.gz'

这样可以节省网络开销,这意味着您不必在另一端进行tar操作,以防您想使用rsync进行传输。


Netcat非常适合此功能。(从一台主机到另一台主机的猫)。
Hennes

3
@Hennes:由于缺少身份验证,完整性检查,数据加密,而且每次传输必须在两侧手动启动它(即工作的2倍),听起来有些不尽人意
令人难忘的

在大多数情况下,我先将其压缩,然后再通过网络转储。任何完整性故障都可能会显示为减压错误(尽管我在使用时从未遇到过任何错误)。至于启动两个程序:是的,是的。
Hennes

3
可能需要做更多的工作,但是对于在受保护的本地网络中的机器之间或通过VPN进行时间敏感的操作期间通过链接发送大型压缩归档文件时,通过nc进行管道传输的速度明显比SSH(通常是通过1Gb网络) 2倍)。发送存档的md5总和以进行完整性检查。
后台打印程序
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.