7Zip - Linha de Comando: Excluir pasta (s) por padrão curinga?

108

Alguma idéia de como excluir um caminho curinga de um comando 7zip da linha de comando?

Estou fazendo algo parecido com isto:

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

e gostaria de excluir qualquer \bin\*.*ou \obj\*.*pastas encontradas embaixo "FolderToArchive".

Para excluir arquivos, você pode usar o -xparâmetro O arquivo de ajuda fornece este exemplo para usar -x:

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

Isso é ótimo para excluir um arquivo. Mas, novamente, eu gostaria de excluir uma pasta especificada com curinga. Sob a minha "FolderToArchive" existem várias pastas, nessas pastas não podem ou não ser bin\e obj\pastas. Gostaria de não incluí-los no arquivo.

Eu tentei padrões como

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

Nenhum parece excluir a bin\pasta. Isso é simplesmente uma limitação do 7zip?

Yoopergeek
fonte

Respostas:

132

Para excluir as pastas bin e obj recursivamente, você pode usar o comando:

7z.exe a -t7z archive.7z FolderToArchive\ -mx0 -xr!bin -xr!obj
pesado
fonte
5
Para todos os outros: se você quiser ignorar apenas os arquivos no diretório raiz, use -xr0!*.zip- pelo menos eu não poderia fazê-lo funcionar sem o r0.
Oliver
6
Além disso, se isso estiver em uma linha de comando do Linux / Unix, pode ser necessário incluir aspas simples, para não adicionar pré-processamento pelo shell, por exemplo, '-x!$RECYCLE.BIN'para excluir a Lixeira de uma unidade externa.
thanosa75
15

Para evitar erros, use -r ou -xr com cuidado.

suponha que você tenha diretórios como:

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

e execute o comando:

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

o que você conseguiu em archive.7z:

.\path2\src
.\path5\src

Ou seja, o .\path2\e .\path5\tornou-se a pasta superior em archive.7z, e ambos os bindiretórios foram excluídos.

-x suporta apenas caminho / nome do arquivo em relação à pasta superior do arquivo morto.

Portanto, se você deseja excluir apenas .\path1\path2\bin, mas incluir todos os outros diretórios 'bin', o comando deve ser assim:

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

Tentei usar o caminho absoluto em -x, mas nunca obtive sucesso.


Atualizar:

Existe uma opção -spfno 7z para Linux que funciona com caminho absoluto.

Segundo Marco , -spftambém está disponível no Windows a partir do 7-zip 15.14

zhazha
fonte
2
Nota: Pelo menos no Ubuntu, é melhor você colocar todos esses termos -x entre aspas simples '-x!path2\bin'para não substituir a shell ... (obtendo um "comando" sintaticamente incorreto por muito mais tempo ...)
Frank Nocke
Para se referir ao comentário de @FrankNocke, você também pode fazer isso no Windows para permitir pontos nos nomes das pastas:'-xr!\.foo'
DonBecker