Відповіді:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
припускаючи, що ви використовуєте bash. Як правило, встановіть змінну середовища GZIP на "-9" і запустіть tar нормально.
Також - якщо ви дійсно хочете найкращого стиснення, не використовуйте gzip. Використовуйте lzma або 7z.
І при використанні gzip (що все-таки є хорошою ідеєю з різних причин, будь-ласка) враховуйте використання pigz
програми, а не gzip
.
GZIP_OPT
, використання має бути однаковим.
Замість використання прапора gzip для tar, gzip файли вручну після процедури tar, тоді ви можете вказати рівень стиснення для програми gzip:
tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar
Або ви можете використовувати:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
-9 у командному рядку gzip вказує gzip використовувати максимально можливий рівень стиснення (за замовчуванням - -6).
Редагувати: Фіксований командний рядок на основі коментаря @depesz.
file.tar
, оскільки gzip
додає розширення ".gz".
f -
? якщо немає файлу, то це stdin / out
Сучасні версії tar підтримують формат архіву xz (GNU tar, починаючи з 1,22 у 2009 році, Busybox з 1,17,0 у 2010 році).
Він заснований на lzma2 , на зразок 7-Zip версії gz . Це дає кращу компресію, якщо ви все в порядку з необхідністю підтримки xz.
tar -Jcvf file.tar.xz /path/to/directory
Я щойно тут дізнався (в основному, це питання, але в Unix stackexchange), що існує також змінна середовища XZ_OPT = -9 для управління рівнем стиснення XZ, подібним GZIP в іншому пості.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
Це друге рішення Matrix Mole, але трохи скорочене:
При виклику tar, параметр f
зазначає, що вихід - файл. Якщо встановити його на -
(stdout), тар записує свій вихід у stdout, що є поведінкою за замовчуванням без обох f
і -
.
І як зазначено на сторінці gzip
man, якщо файли не вказані, gzip буде стискатися зі стандартного вводу. Там немає необхідності -
в gzip
виклику.
Опція --best
(еквівалентна -9
) встановлює найвищий рівень стиснення.
xz
і pixz
теж. Це прекрасний спосіб контролювати кількість потоків, які використовуються для паралельного стиснення, без необхідності створювати проміжний файл .tar. Так іtar -cv /path/to/dir | pixz -p4 > output.tpxz
Також є можливість вказати програму стиснення за допомогою -I. Це може включати параметр рівня стиснення.
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
-I
аргументі, вони намагатимуться трактувати всю річ як ім'я програми для виконання, і, таким чином, не вдасться. Принаймні, з вмістом 1,29 дьогтю в Debian Stretch, це працює.
top
та бачити, використовуючи будь-який процесор між 200% -400 $.