当我管道到gzip
它不能接受标准输入时,我应该使用xargs
将标准输入转换为参数
$ls
1.txt
$ls |xargs gzip && ls
1.txt.gz
一切都好 。但是当我想压缩一个 cpio 存档文件时
$ls | cpio -ov | gzip > archive.cpio.gz
也可以,但这ls | cpio -ov | xargs gzip
不起作用。为什么在第二种情况下gzip
接受标准输入而它不能接受参数?
当我管道到gzip
它不能接受标准输入时,我应该使用xargs
将标准输入转换为参数
$ls
1.txt
$ls |xargs gzip && ls
1.txt.gz
一切都好 。但是当我想压缩一个 cpio 存档文件时
$ls | cpio -ov | gzip > archive.cpio.gz
也可以,但这ls | cpio -ov | xargs gzip
不起作用。为什么在第二种情况下gzip
接受标准输入而它不能接受参数?
命令行参数和标准输入之间是有区别的。
gzip
接受文件名作为参数。它将从指定文件中读取原始数据并压缩它们。如果您有一个输出文件名列表的命令,则可以使用xargs
将这些文件名gzip
作为命令行参数传递。但是,如果没有文件参数传递给
gzip
,它默认从标准输入读取其原始数据并将压缩结果打印到标准输出。如果您有一个输出要压缩的原始数据的命令,您可以将其通过管道传输到.gzip