Сжимайте файлы при чтении данных из STDIN

127

Можно ли сжимать (создавать сжатый архив) данные при чтении из stdin в Linux?

Космос
источник
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он принадлежит Unix и Linux,
Дэн Даскалеску

Ответы:

180

Да, используйте для этого gzip. Лучший способ - прочитать данные как входные и перенаправить сжатый в выходной файл, т.е.

cat test.csv | gzip > test.csv.gz

cat test.csvотправит данные как стандартный вывод, а использование gzip со знаком трубы будет читать эти данные как стандартный ввод. Обязательно перенаправьте вывод gzip в какой-либо файл, поскольку сжатые данные не будут записаны в терминал.

Космос
источник
4
Обратите внимание, что файлы test.csv.gz имеют нулевой размер, пока поток данных не будет закрыт.
MUY Belgium
... и как это сделать? Неужели это отдельный вопрос?
russellpierce 08
9
Это также работает с xz:mysqldump mydb | xz > dbdump.sql.xz
jeroen
1
Можно использовать -9, уровень сжатия по умолчанию -6.
Pablo A
110

Да, gzipпозволю тебе это сделать. Если вы просто запустите gzip > foo.gz, он сжимает STDIN в файл foo.gz. Вы также можете передавать в него данные, например some_command | gzip > foo.gz.

jtbandes
источник
1

gzip > stdin.gzвозможно? В противном случае вам нужно конкретизировать свой вопрос.

retracile
источник