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


83

У мене така структура папки:

  • корінь
    • папка1
    • папка2
    • папка3
    • 7za.exe

Я хочу запустити інструмент командного рядка 7 zip для стиснення всіх файлів у folder1zip-файлі під назвою folder1.zip.

Виконання наступного

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

створює zip-файл, як очікувалося. Однак, коли я відкриваю zip-файл, у ньому є папка під назвою folder1, а всередині у мене є всі файли, які були в цій папці. Я не хочу, щоб ім’я папки було додано до папки zip, тобто я хотів би додати всі файли у форматі файлу «Плоский».

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

Чи є перемикач, який забезпечує цю функціональність?


Ви можете cdв папку1 і 7za.exe a -tzip ..\folder1.zip *.*?
zpletan

Відповіді:


136

З 7-Zip-довідкового файлу:

команда (Додати)

Додає файли в архів.

Приклади

7z a archive1.zip subdir\

додає всі файли і підпапки з підкаталога папки до архіву archive1.zip. Імена файлів в архіві будуть містити subdir \ префікс.

7z a archive2.zip .\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).


2

Це працювало для мене

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

cd /D "C:\Parent"

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

Це створить Parent.zip в C: \ Parent


2
Це дублює іншу відповідь і не додає нового вмісту. Будь ласка, не публікуйте відповіді, якщо у вас насправді є щось нове.
DavidPostill

Ну а поки я шукав рішення, я не знайшов точного рішення. Очевидно, я не просто скопіюватиму вставити деякі відповіді, які я знайшов в Інтернеті. Я витрачаю на це деякий час, тому відчув, що мушу поділитися цим. Як на мене, ви можете знайти цю точну відповідь тут і на розміщеному мною стеці.
Pritesh Dhokchaule

Зауважте, що 7-Zip не вважає *.*"всі файли", а "усі файли, які мають частину імені файлу". Тож ця відповідь фактично опустить файли, які не мають розширення (це зазначено у прийнятій відповіді).
Bill_Stewart

1

Просто для розширення прийнятої відповіді (я не зміг додати коментар туди):

У Linux додавання "*" не працювало для мене, тому я в кінцевому підсумку створив більше багатослівний командний рядок, який дав бажаний результат:

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

===========

пояснення сценарію:

  • зберегти поточний шлях dir для використання пізніше;
  • перейти до каталогу, який потрібно архівувати;
  • створити архів (повідомлення '.' (крапка) наприкінці);
  • повернутися до оригінального режисера;
  • позбутися змінної, яка зберігала оригінальний шлях до dir

Я сподіваюся, що комусь це може бути корисно.


Я б запропонував розмістити *лапки (інакше оболонка розширить його до файлів у цьому місці).
Саймон Собіш

-1

Як щодо цього. наприклад, папка / підпапка1, папка / підпапка2

виберіть усю підпапку> клацніть правою кнопкою миші та створіть архів> виберіть будь-який формат

* Ім'я архіву буде батьківською папкою ..

Просте так?


3
Питання стосується CLI для 7-zip, а не як використовувати GUI. Навчитися користуватися графічним інтерфейсом безглуздо, коли потрібно автоматизувати речі.
бінкі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.