У меня есть следующая структура папок:
- корень
- folder1
- folder2
- folder3
- 7za.exe
Я хочу запустить инструмент командной строки 7-Zip, чтобы сжать все файлы в folder1
в файл Zip с именем folder1.Zip
.
Запуск следующего
7za.exe a -tzip folder1.Zip folder1\\*.*
создает файл Zip, как и ожидалось. Однако, когда я открываю Zip-файл, в нем есть папка с именем folder1
, и внутри него у меня есть все файлы, которые были в этой папке. Я не хочу, чтобы имя папки добавлялось в папку Zip, т. Е. Я хотел бы добавить все файлы в формате «Flat».
Я также не хочу рекурсивно запускать инструмент командной строки для каждого отдельного файла/папки.
Есть ли переключатель, который обеспечивает эту функциональность?
Из 7-Zip Help file:
Команда (Добавить)
Добавляет файлы в архив.
Примеры
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
===========
объяснение сценария:
Я надеюсь, что это может быть полезно для кого-то.