Створіть архів із командою “gzip”


12

Мені потрібно створити архів за допомогою команди gzip (не tar - це необхідно), а архів повинен містити файли з іншого каталогу - наприклад, / і т.д. Я намагався використовувати команду

gzip myetc.gz /etc

Але це не спрацювало.


3
gzipне є zip. Вони різні інструменти, які працюють по-різному.
roaima

3
gzipце просто потоковий компресор. Про файли чи каталоги він не знає.

3
Чому не можна використовувати дьоготь?
marcelm

Якщо у вас немає дьогтю, у вас є cpio?
Rup

2
Ви кажете, що хочете створити архів, але не можете використовувати tar. Ви знаєте, що частина слова "дьоготь" походить від "ARchive". Я маю на увазі, це його причина. Хто або що хотів би виключити "дьоготь" з процесу створення архіву? В основному ви запитуєте, як забити гвинт молотком (не викруткою - це потрібно).
Майк S

Відповіді:


6

Gzip працює лише з одним файлом або потоком - дані, передані в gzip. Тож спочатку потрібно генерувати один файл, як, наприклад, з tar, а потім ви можете його gzip. Інший варіант - зібрати всі окремі файли, а потім націлити їх на один файл.

Обидва ці рішення дурні і їх не слід використовувати. Вам слід використовувати tar з вбудованою опцією стиснення і робити це все в одній команді.


1
Чому перший метод повинен бути дурним? Це звичайний спосіб виготовлення .tar.gz...
rexkogitans

Ну, дурний, мабуть, не правильний термін, але замість того, щоб використовувати gzip, якщо ви можете використовувати tar з опцією c. Це простіше, і я не вірю, що трубопровід до gzip має перевагу.
SPRBRN

Gzip може працювати для декількох файлів з опцією -r, але створить новий .gz для кожного файлу в папці.
Лучано Андресс Мартіні

1
@rexkogitans - це дурно так само, cat filename | grep blahяк і дурно. Це також набагато менше оптимального, оскільки він би використовував великий проміжний простір. Я не знаю, чи вважав би це дурним настільки ж необґрунтованим, неоптимальним і взагалі просто некрасивим. Ну, і дурні теж працюють.
Майк S

О, тепер я бачу, що таке дурне. Ні, `tar -czf` - це шлях, оскільки він не передбачає марності fork().
rexkogitans

13

gzipпрацює з файлами, а не з каталогами. Тому для створення архіву каталогу вам потрібно використовувати tar(який створить єдиний тарбол з декількох файлів):

tar cvf myetc.tar /etc

або для gzipped архіву:

tar cvzf myetc.tar.gz /etc

2
якщо у вас є "старовинна" система без опції "-z", вони можуть це робити: cd / ; tar cf - ./etc | gzip -c - > myetc.tar.gz (якщо вам цікаво, чому я натискаю "./etc" замість "/ і т. д.", це тому, що в тих старих системах, коли використовується tar xvf, він виведе в / etc і замінить його ... [або у цьому випадку ви повинні використовувати "pax"]. Зворотна команда, тобто витягти цей архів під "/ кудись": cd /somewhere ; gzip -dc < /the/location/of/myetc.tar.gz | tar xvf -
Олів'є Дулак

1

Якщо ви дійсно не маєте tar, ви можете використовувати gzip для створення резервної копії каталогу за допомогою параметра (-r - рекурсивно), але, можливо, це не зовсім те, чого ви очікуєте від ...

Спочатку вам потрібно буде скопіювати свій каталог на інше ім’я, якщо ви хочете, щоб оригінальний каталог не був недоторканим.

#cp -a directory my_gzip_alone_backup

По-друге, ви стисите всі файли в каталозі рекурсивно (-r).

#gzip -r my_gzip_alone_backup

Тепер давайте заглянемо в резервну копію my-gzip-alone. У вас не буде жодного файлу myfile.gz, як ви очікували, але багато gziped-файлів рекурсивно. Але це не добре робити це з тощо через символьні посилання ...

Для розпакування каталогу ця ж логіка може бути застосована і з gunzip.

Інший спосіб - перетворити каталог в один файл, якщо у вас немає tar для цього, але утиліта DD, як продемонстровано у цьому дописі: /ubuntu/626634/converting-a -файл до каталогу

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