Создание архива из каталога без добавления имени каталога в архив
У меня есть следующая структура папок:
- корень
- folder1
- folder2
- folder3
- 7za.exe
Я хочу запустить инструмент командной строки 7-zip, чтобы сжать все файлы в folder1
в почтовый файл с именем folder1.zip
,
Запуск следующего
7za.exe a -tzip folder1.zip folder1\\*.*
производит zip-файл, как и ожидалось. Однако, когда я открываю zip-файл, в нем есть папка с именем folder1
и внутри этого у меня есть все файлы, которые были в этой папке. Я не хочу, чтобы имя папки добавлялось в zip-папку, т.е. я хотел бы добавить все файлы в формате "Flat".
Я также не хочу рекурсивно запускать инструмент командной строки для каждого отдельного файла / папки.
Есть ли переключатель, который обеспечивает эту функциональность?
4 ответа
Из файла справки 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).
Это сработало для меня
Рассмотрим структуру папок, например C:\Parent\SubFolders..... И вы хотите создать parent.zip, который будет содержать все файлы и папки C: \ Parent без родительской папки [т.е. он будет начинаться с SubFolders.....]
cd /D "C:\Parent"
"7z.exe" a Parent.zip "*.*" -r
Это создаст Parent.zip в C: \ Parent
Просто чтобы расширить принятый ответ (я не смог добавить комментарий там):
В Linux добавление "*" для меня не сработало, поэтому я придумал более подробную командную строку, которая дала желаемый результат:
curr_dir=$(pwd); \
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir
===========
объяснение сценария:
- сохранить текущий путь к каталогу для последующего использования;
- перейдите в каталог, который необходимо заархивировать;
- создать архив (отметьте "." (точка) в конце);
- вернуться к первоначальному каталогу;
- избавиться от переменной, в которой хранится оригинальный путь к каталогу
Я надеюсь, что это может быть полезно для кого-то.
Как насчет этого. например, папка / вложенная папка1, папка / вложенная папка2
выберите все подпапки> щелкните правой кнопкой мыши, затем создайте архив> выберите любой формат
* Имя архива будет родительской папкой.
Просто верно?