gzip 接受标准输入吗?

gzip 接受标准输入吗?

当我通过管道连接到gzip它时,它无法接受 stdin,我应该使用xargs将 stdin 转换为参数

$ls
1.txt
$ls |xargs gzip && ls 
1.txt.gz

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

$ls | cpio -ov | gzip > archive.cpio.gz

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

答案1

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

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

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

相关内容