Стискайте файли, читаючи дані з STDIN


127

Чи можливо стиснути (створити стислий архів) дані під час читання зі stdin в Linux?


Я голосую за те, щоб закрити це питання поза темою, оскільки воно належить Unix & Linux
Dan Dascalescu

Відповіді:


180

Так, використовуйте для цього gzip. Найкращий спосіб - це читати дані як вхідні та перенаправляти стиснуті на вихідний файл, тобто

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

cat test.csvбуде надсилати дані у вигляді stdout і, використовуючи pipe-sign, gzip прочитає ці дані як stdin. Переконайтеся, що перенаправити вихід gzip на якийсь файл, оскільки стислі дані не будуть записуватися в термінал.


4
Зауважте, що файли test.csv.gz залишаються розміром 0, поки потік даних не закриється.
МУП Бельгія

... і як це робити? Це справді окреме питання?
russellpierce

9
Це також працює з xz:mysqldump mydb | xz > dbdump.sql.xz
jeroen

1
Неможливо використовувати -9, рівень стиснення за замовчуванням - -6.
Пабло А

110

Так, gzipдозволить вам це зробити. Якщо ви просто запустите gzip > foo.gz, він стисне STDIN до файлу foo.gz. Ви також можете передавати дані, наприклад some_command | gzip > foo.gz.


1

gzip > stdin.gzможливо? В іншому випадку вам потрібно чітко визначити своє запитання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.