如何即时对输出进行 tar/untar

如何即时对输出进行 tar/untar

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

  • tar 到标准输出
  • 从标准输出读取此 tar 输出并提取到其他文件夹。

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

但也许有更惯用的方法来实现它。

答案1

相同-f -选项也适用于涂焦油。

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

GNU tar 默认使用 stdio:

tar -c something | tar -C somefolder -xv

rsync 也很流行。

rsync -av something/ somefolder/

答案2

这里只是添加另一个用例。我在一个几乎磁盘空间不足的系统上有一个大型目录结构,并且希望在另一台有大量空间的机器上最终得到目录结构的 tar.gz 文件。

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

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

答案3

我的声誉不足以发布有关使用 netcat 的评论。

在接收端运行: netcat -l 5555 > /path/to/dest.tar.gznetcat -l 5555 | tar -C /path/to/expanded/tar -xz

在发送端运行: tar -C /path/to/source -cz files | netcat <target IP/hostname> 5555

如果您的网络速度很快,就不必费心压缩和解压 tar。多年来,我曾使用过此文件的某些变体来进行各种恢复。

相关内容