2011-09-26 16:51:38 +0000 2011-09-26 16:51:38 +0000
86
86

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

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

  • корневая
  • папка1
  • папка2
  • папка3
  • 7za.exe

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

Выполнение следующих

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

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

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

Ответы (4)

141
141
141
2011-09-26 17:25:54 +0000

Из файла 7-Zip Help :

a (Add) команда

Добавление файлов в архив.

Примеры `7z a archive1.zip subdirИз файла [ 7-Zip Help ]0x3&:

[ a (Add) команда ]0x3&

Добавление файлов в архив.

Примеры

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

7z a archive2.zip .\subdir\*

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

`cd /D c:\dir1Из файла [ 7-Zip Help ]0x3&:

[ a (Add) команда ]0x3&

Добавление файлов в архив.

Примеры `7z a archive1.zip subdirИз файла [ 7-Zip Help ]0x3&:

[ a (Add) команда ]0x3&

Добавление файлов в архив.

Примеры

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

7z a archive2.zip .\subdir\*

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

`7z a c:\archive3.zip dir2\dir3Из файла [ 7-Zip Help ]0x3&:

[ a (Add) команда ]0x3&

Добавление файлов в архив.

Примеры `7z a archive1.zip subdirИз файла [ 7-Zip Help ]0x3&:

[ a (Add) команда ]0x3&

Добавление файлов в архив.

Примеры

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

7z a archive2.zip .\subdir\*

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

`cd /D c:\dir1Из файла [ 7-Zip Help ]0x3&:

[ a (Add) команда ]0x3&

Добавление файлов в архив.

Примеры `7z a archive1.zip subdirИз файла [ 7-Zip Help ]0x3&:

[ a (Add) команда ]0x3&

Добавление файлов в архив.

Примеры

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

7z a archive2.zip .\subdir\*

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

Имена файлов в архиве 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 Add-on).

2
2
2
2016-06-07 18:04:40 +0000

Для меня это сработало

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

cd /D "C:\Parent"

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

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

1
1
1
2018-07-17 10:49:04 +0000

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

В Linux добавление ‘*’ не сработало для меня, так что в итоге я создал более многословную командную строку, которая дала желаемый результат:

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

===========

объяснение скрипта:

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

Надеюсь, это может кому-то пригодиться.

-1
-1
-1
2017-03-17 05:23:32 +0000

Например, Folder/subFolder1, Folder/subfolder2

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

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

Простое право?