Вопрос или проблема
Я хочу разархивировать весь контент zip-файла в корневой каталог моего сервера.
Однако каждый раз, когда я пытаюсь сделать это, создается папка с именем файла.
Zip-файл называется src.zip
Файл находится в корневом каталоге моего сайта.
Я использовал следующую команду
unzip src.zip
Это разархивирует его, но затем создает папку с именем src и помещает содержимое туда.
Я хочу, чтобы все содержимое было в корне сайта, а не в папке.
Zip-файлы не хранят абсолютные пути. Ниже приведен фрагмент из zip-спецификации, APPNOTE.TXT
4.4.17.1 Имя файла с опциональным относительным путем.
Хранимый путь НЕ ДОЛЖЕН содержать буквы
диска или устройства, или начальную косую черту. Все косые черты
ДОЛЖНЫ быть прямыми "/" в отличие от
обратных черт '\', чтобы обеспечить совместимость с файловыми системами Amiga
и UNIX и т.д. Если ввод поступал из стандартного
ввода, поля имени файла нет.
Чтобы извлечь zip-файл в конкретное место, используйте опцию -d
. Это извлечет содержимое zip в указанную директорию.
Например:
unzip -d / src.zip
Ответ или решение
Если вы хотите разархивировать содержимое zip-файла src.zip
в корневой каталог вашего сервера, но при этом избегаете создания отдельной папки для содержимого архива, необходимо использовать опцию -d
, которая позволяет указать целевой каталог для извлеченных файлов. Основная проблема, с которой вы столкнулись, заключается в том, что содержимое архива извлекается в папку с именем архива, что создаёт нежелательную структуру директорий.
Подробные инструкции по разархивированию без создания дополнительной папки:
-
Понимание ZIP-архивов: Согласно спецификации ZIP (документ APPNOTE.TXT), ZIP-файлы не содержат абсолютных путей, а используют относительные. Это означает, что структура извлекаемых файлов по умолчанию зависит от исходной структуры во время их архивирования.
-
Использование команды
unzip
:- Команда
unzip src.zip
сама по себе может создать папку, основанную на имени ZIP-файла, если архив был изначально создан именно так.
- Команда
-
Правильное использование флага
-d
:- Используйте команду
unzip -d / src.zip
для извлечения содержимого непосредственно в корневую директорию сервера. Опция-d /
указывает командному интерпретатору на извлечение содержимого непосредственно в заданную директорию, в данном случае на корень. - Следует проявить осторожность при извлечении файлов в корень, так как это может перезаписать существующие файлы с теми же именами и сыграть роль в вопросах безопасности.
- Используйте команду
Доказательство концепции:
-
Проверка содержимого архива:
Перед извлечением стоит проверить содержимое архива, чтобы убедиться, что его структура не содержит нежелательных путей. Для этого используйте команду:unzip -l src.zip
Эта команда показывает список файлов и их путь в архиве.
-
Внимание к деталям:
- Убедитесь, что у вас есть резервные копии важных файлов перед выполнением любых операций над ними.
- Проверьте права доступа, чтобы команды имели достаточно привилегий для извлечения в корневой каталог.
Настоятельно рекомендуется использовать командную строку внимательно, так как неправильное выполнение команд может привести к непредвиденным последствиям на сервере.Инструкция позволяет не только решить поставленную задачу, но и гарантирует, что разархивация будет выполнена корректно и без лишних проблем.