Gzip принимает стандартный ввод?

Когда я трубку gzip он не может принять стандартный ввод, я должен использовать 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,

Другие вопросы по тегам