Создание архива из каталога без добавления имени каталога в архив

84

У меня есть следующая структура папок:

  • корень
    • folder1
    • folder2
    • folder3
    • 7za.exe

Я хочу запустить инструмент командной строки 7-zip, чтобы сжать все файлы в folder1zip-файл с именем folder1.zip.

Запуск следующего

7za.exe a -tzip folder1.zip folder1\\*.*

производит ZIP-файл, как ожидалось. Тем не менее, когда я открываю zip-файл, в нем есть папка с именем folder1, а внутри него у меня есть все файлы, которые были в этой папке. Я не хочу, чтобы имя папки добавлялось в zip-папку, т.е. я хотел бы добавить все файлы в формате «Flat».

Я также не хочу рекурсивно запускать инструмент командной строки для каждого отдельного файла / папки.

Есть ли переключатель, который обеспечивает эту функциональность?

гг.
источник
Можете ли вы cdв папку 1 и 7za.exe a -tzip ..\folder1.zip *.*?
zpletan

Ответы:

137

Из файла справки 7-Zip :

команда (Добавить)

Добавляет файлы в архив.

Примеры

7z a archive1.zip subdir\

добавляет все файлы и подпапки из папки subdir в архив archive1.zip. Имена файлов в архиве будут содержать префикс subdir \.

7z a archive2.zip .\subdir\*

добавляет все файлы и подпапки из папки subdir в архив archive2.zip. Имена файлов в архиве не будут содержать префикса subdir \.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

Имена файлов в архиве c: \ archive3.zip будут содержать префикс dir2 \ dir3 \, но они не будут содержать префикс c: \ dir1 \.

Таким образом, команда, которую вы хотите, была бы: 7za.exe a folder1.zip .\folder1\*

Также обратите внимание на обработку символов подстановки в 7-Zip. Он не рассматривается *.*как «все файлы» - это означает «все файлы с точкой в ​​имени файла». Файлы без расширения будут пропущены. Если вы действительно хотите все файлы, просто используйте *вместо этого.

Наконец, -tzipпараметр не нужен, если имя файла архива заканчивается .zip. 7-Zip достаточно умен, чтобы выяснить, какой формат вы хотите в этих случаях. Требуется только в том случае, если вам нужно собственное расширение (например, 7za.exe a -tzip foo.xpi <files>для надстройки Mozilla).

afrazier
источник
2

Это сработало для меня

Рассмотрим структуру папок, например C: \ Parent \ SubFolders ..... И вы хотите создать parent.zip, который будет содержать все файлы и папки C: \ Parent без родительской папки [т.е. он будет начинаться с SubFolders .....]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Это создаст Parent.zip в C: \ Parent

Притеш Дхокчауле
источник
2
Это дублирует другой ответ и не добавляет новый контент. Пожалуйста, не публикуйте ответ, если у вас нет чего-то нового.
ДэвидПостилл
Ну, пока я искал решение, я не получил точное решение. Очевидно, я не буду просто копировать и вставлять некоторые ответы, которые я нашел в Интернете. Я провожу некоторое время на этом, поэтому я чувствовал, что должен поделиться этим. Как по мне, вы можете найти этот точный ответ здесь и на Переполнении стека, опубликованном мной.
Притеш Дохчауле
Обратите внимание, что 7-Zip означает не *.*«все файлы», а «все файлы, у которых точка является частью имени файла». Таким образом, этот ответ фактически пропустит файлы, которые не имеют расширения (это отмечено в принятом ответе).
Bill_Stewart
1

Просто чтобы расширить принятый ответ (я не смог добавить комментарий там):

В Linux добавление «*» для меня не сработало, поэтому я придумал более подробную командную строку, которая дала желаемый результат:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

объяснение сценария:

  • сохранить текущий путь к каталогу для последующего использования;
  • перейдите в каталог, который необходимо заархивировать;
  • создать архив (отметьте «.» (точка) в конце);
  • вернуться к первоначальному каталогу;
  • избавиться от переменной, в которой хранится оригинальный путь к каталогу

Я надеюсь, что это может быть полезно для кого-то.

Humanier
источник
Я бы предложил поместить *в кавычки (в противном случае оболочка развернет его в файлы в этом месте).
Симон Собиш
-1

Как насчет этого. например, папка / вложенная папка1, папка / вложенная папка2

выберите все подпапки> щелкните правой кнопкой мыши, затем создайте архив> выберите любой формат

* Имя архива будет родительской папкой.

Просто верно?

user708375
источник
3
Вопрос о CLI для 7-zip, а не о том, как использовать GUI. Научиться использовать графический интерфейс бессмысленно, если вы хотите автоматизировать вещи.
binki