Я должен создать архив с помощью команды gzip (не tar - это необходимо), и архив должен содержать файлы из другого каталога - например, / etc. Я пытался использовать команду
gzipне zip. Это разные инструменты, которые работают по-разному.
Ройма
3
gzipэто просто компрессор потока. Он не знает о файлах или каталогах.
3
Почему ты не можешь использовать смолу?
marcelm
Если у вас нет смолы, у вас есть cpio?
Rup
2
Вы говорите, что хотите создать архив, но не можете использовать tar. Вы знаете, что часть слова "tar" происходит от "ARchive". Я имею в виду, что это его смысл. Кто или что хотел бы исключить "tar" из процесса создания архива? В основном вы спрашиваете, как управлять винтом с помощью молотка (не отвертка - это необходимо).
Майк С.
Ответы:
6
Gzip работает только с одним файлом или потоком - данные передаются в gzip. Итак, сначала вам нужно сгенерировать один файл, как с помощью tar, а затем вы можете распаковать его. Другой вариант - сжать все отдельные файлы, а затем скопировать их в один файл.
Оба эти решения глупы и не должны использоваться. Вы должны использовать tar со встроенной опцией сжатия и делать все это одной командой.
Почему первый метод должен быть глупым? Это обычный способ производства .tar.gz...
rexkogitans
Ну, глупо, наверное, не правильный термин, но вместо использования gzip, если вы можете использовать tar с опцией c. Это проще, и я не верю, что передача tar в gzip имеет преимущество.
СПРБРН
Gzip может работать с несколькими файлами с параметром -r, но создаст новый .gz для каждого файла в папке.
Лучано Андресс Мартини
1
@rexkogitans - это глупо так же, cat filename | grep blahкак глупо. Это также намного меньше, чем оптимальное, потому что он будет использовать большое промежуточное пространство. Я не знаю, назову ли я это глупым, настолько же необоснованным, неоптимальным и вообще просто уродливым. Ну, глупо работает тоже.
Майк С.
О, теперь я вижу, что это так глупо. Нет, tar -czf - это путь, который не включает в себя бесполезное fork().
rexkogitans
13
gzipработает с файлами, а не каталогами. Поэтому для создания архива каталога вам нужно использовать tar(который создаст один архив из нескольких файлов):
если у кого-то есть «древняя» система без опции «-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.
gzip
неzip
. Это разные инструменты, которые работают по-разному.gzip
это просто компрессор потока. Он не знает о файлах или каталогах.Ответы:
Gzip работает только с одним файлом или потоком - данные передаются в gzip. Итак, сначала вам нужно сгенерировать один файл, как с помощью tar, а затем вы можете распаковать его. Другой вариант - сжать все отдельные файлы, а затем скопировать их в один файл.
Оба эти решения глупы и не должны использоваться. Вы должны использовать tar со встроенной опцией сжатия и делать все это одной командой.
источник
.tar.gz
...cat filename | grep blah
как глупо. Это также намного меньше, чем оптимальное, потому что он будет использовать большое промежуточное пространство. Я не знаю, назову ли я это глупым, настолько же необоснованным, неоптимальным и вообще просто уродливым. Ну, глупо работает тоже.fork()
.gzip
работает с файлами, а не каталогами. Поэтому для создания архива каталога вам нужно использоватьtar
(который создаст один архив из нескольких файлов):или для сжатого архива:
источник
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 -
Если у вас действительно нет tar, вы можете использовать gzip для создания резервной копии каталога, используя опцию (-r - рекурсивно), но, возможно, это не совсем то, что вы ожидаете ...
Сначала вам нужно будет скопировать ваш каталог под другим именем, если вы хотите сохранить исходный каталог неприкосновенным.
Во-вторых, вы будете сжимать все файлы в каталоге рекурсивно (-r).
Теперь давайте заглянем внутрь my-gzip-alone-backup. У вас не будет ни одного файла myfile.gz, как вы ожидаете, но рекурсивно будет много gziped файлов. Но это нехорошо делать с помощью символических ссылок ...
Для распаковки каталога та же логика может быть применена с помощью gunzip.
Другой способ - преобразовать каталог в один файл, если у вас нет tar для этого, но есть утилита dd, как показано в этом посте: /ubuntu/626634/converting-a -file к каталогу
источник