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