如何通过管道将文件作为 tar 命令的输入

如何通过管道将文件作为 tar 命令的输入

尝试使用以下命令解压缩管道 tar 文件时出现以下错误:

$ git archive --format=tar 0af62b1 | tar -xf -C /the/path/here/
tar: -C: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now

第一部分git archive --format=tar 0af62b1输出一个 tar 文件,打印在屏幕上。可以使用参数 将该输出捕获到文件中--output file_name

在第二部分中,我尝试将文件的内容提取到指定的路径中。当单独运行时,两者都可以完美运行,git archive 0af62b1 --output file_name然后是tar -xf file_name -C /the/path/here/.

为什么在这种情况下无法进行管道传输?我如何知道某个命令是否接受管道输入?

答案1

我会尝试将您的管道输入git到 标准输入的同义词tar -xf - -C /the/path/here/-或者更简单tar -xC /the/path/here-是默认文件)。

答案2

问题在您的错误输出中给出:

$ git 存档 --format=tar 0af62b1 |柏油-xf-C/该/路径/此处/
tar:-C:无法打开:没有这样的文件或目录
tar: 错误不可恢复: 立即退出

您告诉 tar 使用名为 -C 的文件,该文件不存在,因此会失败。

在工作情况下,您给出一个名为 file_name 的文件,该文件存在并且一切正常。

可能的修复:删除命令中的“-f -C”。

相关内容