Estou tentando compactar usando o PowerShell, mas não estou excluindo os arquivos listados no arquivo excluded_paths
. Quero excluir especialmente todas __pycache__
as ocorrências de pastas que podem ser aninhadas em diferentes níveis da minha base de código python. Atualmente tudo é compactado, incluindo os arquivos e pastas que deveriam ser excluídos.
$excluded_paths = @(
"${parent_folder}/.vscode/*",
"${parent_folder}/.git/*",
"${parent_folder}/temp/*",
"${parent_folder}/resources/documentation/*",
"${parent_folder}/**/useful/*",
"${parent_folder}/scripts/*",
"${parent_folder}/*.template.*",
"${parent_folder}/*TODO.*",
"${parent_folder}/$(Get-Item -Path $MyInvocation.MyCommand.Path).Name"
)
$exclude_pycache = Get-ChildItem -Path $parent_folder -Recurse -Directory -Filter "__pycache__" | ForEach-Object { $_.FullName }
$excluded_paths += $exclude_pycache
Pause
$winrar_path = "C:\Program Files\WinRAR\WinRAR.exe"
#$exclusion_switches = $excluded_paths | ForEach-Object { "-x'$_'" }
#& $winrar_path a -r -ep1 $exclusion_switches "$output_zip" "${parent_folder}\*"
$exclusion_string = $excluded_paths -join ' '
& $winrar_path a -r -ep1 "-x$exclusion_string" "$output_zip" "${parent_folder}\*"
Eu tentei isso:
$exclusion_switches = $excluded_paths | ForEach-Object { "-x'$_'" }
& $winrar_path a -r -ep1 $exclusion_switches "$output_zip" "${parent_folder}\*"
e tentei este:
$exclusion_string = $excluded_paths -join ' '
& $winrar_path a -r -ep1 "-x$exclusion_string" "$output_zip" "${parent_folder}\*"
Mesmo um exemplo simples:
& $winrar_path a -r -x__pycache__ "$output_zip" "${parent_folder}\*"
não funciona. Ele fecha, mas não exclui todas as __pycache__
pastas.
Ok, eu tentei
& $winrar_path a -r "-x*__pycache__*" "$output_zip" "${parent_folder}\*"
e funcionou, mas a documentação do WinRAR não mencionou citá-lo.
O que estou fazendo de errado?
Experimente isso. A edição é necessária de acordo com o seu objeto.
Usando 7-Zip
Alternativa
Se houver apenas uma pasta a ser compactada, basta
CMD
criar um arquivo de texto adicionalExclude.txt
e escrever o nome dos arquivos/pastas que deseja excluir.Notas:
set parent=..
a variável pela sua pasta pai-tzip
: tipo de arquivo (7z, zip, rar, etc)archive.zip
: Nome do arquivoExclude.txt
: Lista de arquivos/pastas a serem excluídos, separados por uma nova linha para cada um.%parent%
eExclude.txt
ao lado do scipt.Conteúdo de Delete.txt (exemplo):
Uso mais rápido
CMD
. No entanto, se você ainda quiser usarPowerShell
:Encontrei a solução estranha. Se você deseja remover recursivamente, você deve defini-lo de forma redundante assim
-x*\scripts -x*\scripts\*
. Para arquivos ou pastas com ponto, use aspas simples, como.git
pasta.& $winrar_path a -r '-x*\.git' '-x*\.git\*' '-x*.gitignore' -x*\__pycache__ -x*\__pycache__\* -x*\scripts -x*\scripts\* -x*\documentation -x*\documentation\* "$output_zip" "${parent_folder}\*"