Назад | Перейти на главную страницу

Попытка gzip каталога применила gzip к каждому файлу отдельно

Я попытался сжать каталог с помощью следующей команды:

gzip -r /home/path/to/backups/mydirectory.gz /home/site/public_html/

Я ожидал увидеть файл .gz внутри ... резервных копий, содержащих все файлы, найденные в ... public_html. Это не то, что случилось. Вместо этого каждый файл был (рекурсивно) переименован в [имя файла] .gz в public_html. Это, очевидно, привело к остановке всего сайта.

Два вопроса: 1) Что я сделал не так с синтаксисом? и 2) Как я могу вернуть все имена файлов к тому, что они были раньше (в точности то, что они есть сейчас, без расширения .gz).

Два вопроса: 1) Что я сделал не так с синтаксисом?

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

tar -cvz -f public_html.tar.gz /home/site/public_html/

Это создает (-c) сжатый с помощью gzip (-z) архив называется public_html.tar.gz содержащие содержимое указанного public_html каталог.

2) Как я могу вернуть все имена файлов к прежним значениям (в точности то, что они есть сейчас, за исключением расширения .gz).

Просто беги gunzip по всем файлам. Например:

gunzip -r /home/site/public_html/

Обратите внимание, что вы также можете просто использовать zip команда, которая создаст единый сжатый архив.

gzip не объединяет файлы .. Это не zip. Вам нужно использовать tar с gzip

tar cf file.tar dir
gzip file.tar

или

tar zcf file.tar.gz dir

gzip является просто компрессор, а не файловый архиватор. Я знаю, это странно, когда ты приезжаешь из мира pkzip, который делает и то, и другое.

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

tar -cvf archive-name.tar  directory-to-store/

Что даст вам несжатый архив. Затем вы можете сжать это с помощью

gzip archive-name.tar

Что даст вам archive-name.tar.gz.

Если вы используете GNU tar (а вы, вероятно, используете), вы можете объединить их в один шаг, добавив флаг z:

tar -czvf archive-name.tar.gz directory-to-store/

и вы можете распаковать

tar -xzvf archive-name.tar.gz

Фактически, с современными версиями GNU tar нет необходимости -z для декомпрессии - обнаружит автоматически. Это удобно, потому что GNU tar также поддерживает -j для (лучше, чем gzip) bzip2 сжатие и (если у вас достаточно новая версия) -J для еще лучшего xz сжатие. Обычно файлы, созданные таким образом .tar.bz2 или .tar.xz Расширения, но тогда раздражает необходимость выбора правильного флага для распаковки, особенно в скриптах.