7Zip - Командний рядок: Виключити папки (шаблони) за шаблоном підстановки?


107

Будь-яка ідея, як виключити макетні шляхи з командного рядка 7zip команди?

Я роблю щось подібне:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0

і хотів би, щоб виключити будь-які \bin\*.*або \obj\*.*папки , що знаходяться під «FolderToArchive».

Для виключення файлів можна скористатися -xпараметром. У файлі довідки наведено такий приклад використання -x:

7z a -tzip archive.zip *.txt -x!temp.*

Це чудово для виключення файлу. Але, знову ж таки, я хотів би виключити папку із заданими символами. Під моїм "FolderToArchive" є кілька папок, під цими папками можуть бути, bin\а можуть і не бути, і obj\папки. Я хотів би не включати їх до архіву.

Я спробував такі моделі, як

-x!bin\*
-x!bin\*.*
-x!\bin\*
-x!\bin\*.*
-x!\\bin\\*
-x!\\bin\\*.*

Здається, жодна bin\папка не виключає . Це просто обмеження 7zip?

Відповіді:


131

Для вилучення папок bin та obj рекурсивно можна скористатися командою:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj

5
Для всіх інших: якщо ви хочете ігнорувати лише файли в кореневому каталозі, використовуйте -xr0!*.zip- принаймні, я не міг би змусити його працювати без r0.
Олівер

6
Крім того, якщо це знаходиться в командному рядку Linux / Unix, можливо, вам знадобиться укласти в окремі лапки, щоб не додавати попередню обробку оболонкою, наприклад, '-x!$RECYCLE.BIN'щоб виключити кошик зовнішнього накопичувача.
thanosa75

15

Щоб уникнути помилок, обережно використовуйте -r або -xr.

припустимо, у вас є каталоги типу:

.\path1\path2\bin
.\path1\path2\src
.\path3\path4\path5\bin
.\path3\path4\path5\src

і запустіть команду:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -xr!bin

що ви отримали в архіві.7z:

.\path2\src
.\path5\src

Тобто, .\path2\і .\path5\стала головною папкою в архіві.7z, і обидва binкаталоги були виключені.

-x лише підтримка шляху / імені файлу відносно верхньої папки в архіві.

Отже, якщо ви хочете виключити .\path1\path2\bin, але включити всі інші каталоги 'bin', команда повинна бути такою:

7z a -t7z archive.7z .\path1\path2 .\path3\path4\path5 -x!path2\bin

Я намагався використовувати абсолютний шлях у -x, але ніколи не вдавався.


Оновлення:

Існує варіант -spfв 7z для Linux, який працює з абсолютним шляхом.

За словами Марко , -spfвін також доступний для Windows від 7-zip 15.14


2
Примітка: Принаймні, на Ubuntu вам найкраще рекомендувати вводити всі ці -x терміни в єдині лапки, '-x!path2\bin'щоб не запускати підстановку оболонки ... (отримуючи вас набагато довше, синтаксично неправильну "команду" ...)
Франк Нокк,

Щоб звернутися до коментаря @FrankNocke, ви також можете це зробити у Windows, щоб дозволити крапки у назвах папок:'-xr!\.foo'
DonBecker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.