Назад | Перейти на главную страницу

Объедините два или более сжатых файла

У меня есть 2 файла gz, которые мне нужно объединить в один, то есть я хочу объединить два файла .gz в один, чтобы при извлечении объединенного файла я получал один файл, содержащий конкатенацию исходных входных файлов.

time join <(zcat r_TR2_2012-05-28-08-10-00.gz) <(zcat r_TR1_2012-05-28-08-10-00.gz)

Приведенное выше утверждение не работает должным образом. Я использую 3 команды, чтобы сделать необходимое.

gunzip r_TR2_2012-05-28-08-10-00.gz 
gunzip r_TR1_2012-05-28-08-10-00.gz 
tar -zcvf combined.tar.gz r_TR1_2012-05-28-08-10-00 r_TR2_2012-05-28-08-10-00 

а затем объединяю файлы вместе, когда я извлекаю их для получения желаемого результата.

Есть ли способ сделать это в 1 заявлении?

Я думаю, вы имеете в виду:

zcat r_TR2_2012-05-28-08-10-00.gz r_TR1_2012-05-28-08-10-00.gz| gzip -9 > joined.gz

Удивительно то, что Quanta опубликовала в комментариях, работает - по крайней мере, на моем Mac!

$ echo abc > foo
$ echo cba > bar
$ gzip foo
$ gzip bar
$ cat foo.gz bar.gz > baz.gz
$ gunzip baz.gz 
$ cat baz 
abc
cba
$

Я несколько встревожен, но тоже впечатлен.

Если у вас несколько сжатых файлов .gz и вам нужно объединить их в один файл, вы можете использовать tar прямо для этого. Нет необходимости распаковывать и снова сжимать их.

Вы можете попробовать это:

tar cvf combined.gz.tar r_TR1_2012-05-28-08-10-00.gz r_TR2_2012-05-28-08-10-00.gz

Однако вы получите файл с расширением .gz.tar в отличие от известных .tar.gz. Чтобы распаковать файл, вы можете попробовать:

tar -xavf combined.gz.tar

Здесь полезен параметр -a (из man tar):

-a, --auto-compress
       use archive suffix to determine the compression program