如何动态解压/解压输出

sha*_*unc 39 bash tar stdout

执行以下操作的惯用方法是什么

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

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

但可能有更惯用的方法来做到这一点。

use*_*686 52

同样的-f -选项也适用于焦油。

tar -cf - something | tar -C somefolder -xvf -
Run Code Online (Sandbox Code Playgroud)

GNU tar 默认使用 stdio:

tar -c something | tar -C somefolder -xv
Run Code Online (Sandbox Code Playgroud)

rsync 也很流行。

rsync -av something/ somefolder/
Run Code Online (Sandbox Code Playgroud)


小智 11

只需在此处添加另一个用例。我在一个几乎没有磁盘空间的系统上有一个很大的目录结构,并希望在另一台有大量空间的机器上得到一个目录结构的 tar.gz 文件。

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

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

  • @Hennes:由于缺乏身份验证、完整性检查、数据加密,以及必须为每次单独的传输(即工作的 2 倍)手动启动它,这听起来有点不完美 (5认同)
  • 这可能需要更多的工作,但对于在安全本地网络或 VPN 中的机器之间的时间敏感操作期间通过链接发送大型压缩档案,通过 nc 的管道将比 SSH 快得多(通过 1Gb 网络,通常乘以 2)。发送存档的 md5 总和以进行完整性检查。 (3认同)