我需要tar在 shell 脚本内的管道中使用来存档和压缩一些文件。
在阅读了手册页后,tar我能够通过将其与参数一起运行来生成tar输出,但我无法找出如何将其从. 由于如果没有指定其他输入,许多命令会从中读取,我尝试过:stdout-Ostdinstdin
pv ~/foo | tar c -O ~/foo.tar
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
tar: Cowardly refusing to create an empty archive
Try 'tar --help' or 'tar --usage' for more information.
Run Code Online (Sandbox Code Playgroud)
如何tar从 读取输入stdin?
使用-Owithc会被忽略,因为没有提取任何文件。无论哪种方式,你都会得到相同的结果:
$ tar c -O foo | tar t
foo
$ tar c foo | tar t
foo
Run Code Online (Sandbox Code Playgroud)
这就是为什么我发现你的错误令人惊讶,因为tar如果你指定一个路径,它就不是胆小鬼。
tar 无法从标准输入读取文件数据来创建存档,因为那时tar将无法知道文件是什么 - 文件在哪里开始或结束,其路径和元数据是什么。