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


Alguma idéia de como excluir um caminho wild-carded (s) de um comando 7zip de linha de comando?

Eu estou fazendo algo assim:

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

e gostaria de excluir qualquer \bin\*.* ou \obj\*.* pastas encontradas abaixo de "FolderToArchive". Para excluir arquivos, você pode usar o -x parâ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, gostaria de excluir uma pasta especificada pelo caractere curinga. Sob o meu "FolderToArchive" existem várias pastas, nessas pastas pode ou não ser bin\ e obj\ pastas. Eu 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. Isso é simplesmente uma limitação do 7zip?


95


origem




Respostas:


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

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

114



Para todos os outros: se você quiser ignorar apenas os arquivos no diretório raiz, use -xr0!*.zip - pelo menos eu não consegui que funcionasse sem o r0. - Oliver
Além disso, se estiver em uma linha de comando do Linux / Unix, talvez seja necessário incluir aspas simples, para não adicionar o pré-processamento pelo shell, por exemplo, '-x!$RECYCLE.BIN' para excluir a Lixeira de uma unidade externa. - thanosa75


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ê tem no arquivo.7z:

.\path2\src
.\path5\src

Isto é, o .\path2\ e .\path5\ tornou-se o pasta superior em archive.7z e ambos bin diretórios foram excluídos.

-x suporta apenas caminho / nome de arquivo relativo para a pasta superior no arquivo.

Então, se você quiser apenas excluir .\path1\path2\bin, mas para 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

Eu tentei usar o caminho absoluto em -x, mas nunca ter sucesso.


Atualizar:

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

De acordo com Marco, -spf também está disponível no Windows a partir do 7-zip 15.14


11



Nota: Pelo menos no Ubuntu, é melhor você colocar todos os termos -x entre aspas simples '-x!path2\bin' para não correr em substituição shell ... (obtendo um "comando" muito mais longo, sintaticamente incorreto ...) - 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