将 curl 的输出通过管道传输到 rpm2cpio

将 curl 的输出通过管道传输到 rpm2cpio

我下载了很多 srpm 来翻找,我以前总是花很多时间,

root@server$ curl rpm -o file.rpm
root@server$ rpm2cpio file.rpm | cpio -id

但这会留下一个丑陋的.rpm 文件,所以我尝试了一个单一管道

root@server$ curl rpm | rpm2cpio - | cpio -id

根据 curl 手册页,curl 默认输出到 stdout,而 rpm2cpio 手册页说,如果唯一的参数是 '-',那么它将从 stdin 读取。

但是我不断收到错误:

error: rpm2cpio: headerRead failed: hdr blob(23176): BAD, read returned 2696
error reading header from package
cpio: premature end of archive
  0 5468k    0 13257    0     0  21912      0  0:04:15 --:--:--  0:04:15 29791
curl: (23) Failed writing body (379 != 1348)

如果我尝试将下载的文件放入管道而不是使用 curl,那么它就可以工作。

现在我知道有很多方法可以解决这个问题,当我有时间的时候我可能会编写这个脚本。我只是好奇为什么 rpm 不喜欢 curl 输出的 rpm。

有任何想法吗?

答案1

事实证明,curl 和 wget 都会将一堆其他内容以及正在检索的文件发送到 stdout,因此在流上调用 rpm2cpio 时会出现错误。

明确使用标志-o -会删除那些多余的东西,现在它可以正常工作。

相关内容