7Zip - Командная строка: Исключить папку (и) по шаблону?

108

Любая идея, как исключить подстановочный путь (и) из командной строки 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?

Yoopergeek
источник

Ответы:

132

Чтобы рекурсивно исключить папки bin и obj, вы можете использовать команду:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
heavyd
источник
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\стала верхней папкой в archive.7z, и оба binкаталога были исключены.

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

Итак, если вы хотите исключить .\path1\path2\bin, но включить все остальные каталоги bin, команда должна выглядеть следующим образом:

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

Я пытался использовать абсолютный путь в -x, но никогда не получалось.


Обновить:

В -spfLinux есть опция, которая работает с абсолютным путем.

По словам Марко , -spfтакже доступен на Windows от 7-ZIP 15,14

Жажа
источник
2
Примечание: По крайней мере , на Ubuntu вы лучше посоветовали поставить все эти -x терминов в одинарных кавычках , '-x!path2\bin'чтобы не впасть в замещение оболочки ... (получение вам «команды» гораздо дольше, синтаксический неправильно ...)
Frank Nocke
Чтобы сослаться на комментарий @FrankNocke, вы также можете сделать это в окнах, чтобы разрешить точки в именах папок:'-xr!\.foo'
DonBecker