Создайте архив командой «gzip»

12

Я должен создать архив с помощью команды gzip (не tar - это необходимо), и архив должен содержать файлы из другого каталога - например, / etc. Я пытался использовать команду

gzip myetc.gz /etc

Но это не сработало.

Элизия Лайт
источник
3
gzipне zip. Это разные инструменты, которые работают по-разному.
Ройма
3
gzipэто просто компрессор потока. Он не знает о файлах или каталогах.
3
Почему ты не можешь использовать смолу?
marcelm
Если у вас нет смолы, у вас есть cpio?
Rup
2
Вы говорите, что хотите создать архив, но не можете использовать tar. Вы знаете, что часть слова "tar" происходит от "ARchive". Я имею в виду, что это его смысл. Кто или что хотел бы исключить "tar" из процесса создания архива? В основном вы спрашиваете, как управлять винтом с помощью молотка (не отвертка - это необходимо).
Майк С.

Ответы:

6

Gzip работает только с одним файлом или потоком - данные передаются в gzip. Итак, сначала вам нужно сгенерировать один файл, как с помощью tar, а затем вы можете распаковать его. Другой вариант - сжать все отдельные файлы, а затем скопировать их в один файл.

Оба эти решения глупы и не должны использоваться. Вы должны использовать tar со встроенной опцией сжатия и делать все это одной командой.

SPRBRN
источник
1
Почему первый метод должен быть глупым? Это обычный способ производства .tar.gz...
rexkogitans
Ну, глупо, наверное, не правильный термин, но вместо использования gzip, если вы можете использовать tar с опцией c. Это проще, и я не верю, что передача tar в gzip имеет преимущество.
СПРБРН
Gzip может работать с несколькими файлами с параметром -r, но создаст новый .gz для каждого файла в папке.
Лучано Андресс Мартини
1
@rexkogitans - это глупо так же, cat filename | grep blahкак глупо. Это также намного меньше, чем оптимальное, потому что он будет использовать большое промежуточное пространство. Я не знаю, назову ли я это глупым, настолько же необоснованным, неоптимальным и вообще просто уродливым. Ну, глупо работает тоже.
Майк С.
О, теперь я вижу, что это так глупо. Нет, tar -czf - это путь, который не включает в себя бесполезное fork().
rexkogitans
13

gzipработает с файлами, а не каталогами. Поэтому для создания архива каталога вам нужно использовать tar(который создаст один архив из нескольких файлов):

tar cvf myetc.tar /etc

или для сжатого архива:

tar cvzf myetc.tar.gz /etc
dr_
источник
2
если у кого-то есть «древняя» система без опции «-z», они могут сделать: cd / ; tar cf - ./etc | gzip -c - > myetc.tar.gz (если вам интересно, почему я tar «./etc» вместо «/ 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-backup. У вас не будет ни одного файла myfile.gz, как вы ожидаете, но рекурсивно будет много gziped файлов. Но это нехорошо делать с помощью символических ссылок ...

Для распаковки каталога та же логика может быть применена с помощью gunzip.

Другой способ - преобразовать каталог в один файл, если у вас нет tar для этого, но есть утилита dd, как показано в этом посте: /ubuntu/626634/converting-a -file к каталогу

Лучано Андресс Мартини
источник