gzip 接受标准输入吗?

Sin*_*osh 4 command-line bash gzip xargs

当我管道到gzip它不能接受 stdin 我应该使用xargs将 stdin 转换为参数

$ls
1.txt
$ls |xargs gzip && ls 
1.txt.gz
Run Code Online (Sandbox Code Playgroud)

一切都好 。但是当我想压缩 cpio 存档文件时

$ls | cpio -ov | gzip > archive.cpio.gz
Run Code Online (Sandbox Code Playgroud)

也没关系,这ls | cpio -ov | xargs gzip 不起作用。为什么在第二种情况下gzip接受标准输入而不能接受参数?

Byt*_*der 12

命令行参数标准输入之间存在差异。

gzip接受文件名作为参数。它将从指定的文件中读取原始数据并压缩它们。如果您有一个输出文件名列表的命令,您可以使用xargs将这些文件名gzip作为命令行参数传递给。

但是,如果没有文件参数传递给gzip,它默认从标准输入读取其原始数据并将压缩结果打印到标准输出。如果您有一个命令输出要压缩的原始数据,则可以将其通过管道传输到.gzip

  • `xargs` 从它的标准输入中读取文本(通常你使用管道在那里获取另一个命令的输出)并构造一个由它自己的参数和来自标准输入的文本组成的新命令行,并执行该新命令。它不关心输入是文件名还是其他任何东西,只是在您的示例中,它只对文件名有意义。 (3认同)