2016-07-05 3 views
0

Я пытаюсь сжать ряд файлов в каталоге, но также распечатать содержимое сжатых файлов в stdout.Как gzip файл, а также печать сжатого содержимого в stdout

Учитывая, что у меня есть:

09:00 /tmp/file1.txt 
10:00 /tmp/file2.txt 
11:00 /tmp/file3.txt 

Я в основном ищу выполнить gzip -c /tmp/file?.txt > /tmp/compressed.gz, но я также хочу, чтобы файлы были сжаты с сохранением исходной метки:

09:00 /tmp/file1.txt.gz 
10:00 /tmp/file2.txt.gz 
11:00 /tmp/file3.txt.gz 
12:00 /tmp/compressed.gz 

есть любым способом сделать это с одной командой и без:

for i in $(ls /tmp/file?.txt) 
do 
     gzip ${i} && cat ${i}.gz >> /tmp/compressed.gz 
done 

Я бы хотел ike для сжатия и записи на диск один раз и не хотите ударять диск для чтения снова.

+0

Вы можете написать файл и stdout с помощью 'gzip .. | tee file.gz', и вы можете установить метки времени с помощью 'touch'. –

+0

gzip работает с одним входным файлом, поэтому вам нужно использовать что-то вроде tar, чтобы сделать архив первым. Или просто используйте zip. – Marichyasana

ответ

1

Это делает то, что вы просите в одной строке:

ls file*.txt | xargs -n1 -I'{}' bash -c 'cat {} | gzip - | tee {}.gz >> compressed.gz; touch {}.gz -r {}' 

Каждый входной файл считывается с диска только один раз, а сжатая версия сохраняется в два раза; один раз в файле * .txt.gz, один раз в файле capture-all compression.gz. Наконец, он корректирует временную метку gzipped-файла после сжатия.

Обратите внимание, что это не удаляет исходный файл txt. Для удаления каждого файла после сжатия:

ls file*.txt | xargs -n1 -I'{}' bash -c 'cat {} | gzip - | tee {}.gz >> compressed.gz; touch {}.gz -r {}; rm {}' 

Испытан на Linux с версией ГНУ ls, xargs, bash, cat, gzip, tee, touch и rm.

0

Непроверено Код

gzip не сжимает несколько файлов в один. Таким образом, вам может понадобиться программа, например, tar, чтобы сначала связать ее, а затем сжать. Существует опция сохранения времени доступа в tar.

gzip file*.txt && tar --atime-preserve=replace -czvf file.tar.gz file*.txt 
Смежные вопросы