web-dev-qa-db-ja.com

gzipはstdinを受け入れますか?

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は機能しません。なぜ第2の状況でgzipはstdinを受け入れ、引数を受け入れられないのですか?

4
Sinoosh

コマンドライン引数標準入力には違いがあります。

gzipは、引数としてfilenamesを受け入れます。指定されたファイルから生データを読み取り、それらを圧縮します。ファイル名のリストを出力するコマンドがある場合、xargsを使用して、それらのファイル名をコマンドライン引数としてgzipに渡すことができます。

ただし、ファイル引数がgzipに渡されない場合、デフォルトではraw data from standard inputを読み取り、圧縮結果を標準出力に出力します。圧縮する生データを出力するコマンドがある場合は、gzipにパイプできます。

12
Byte Commander