【问题标题】:Compress sourcecode excluding binaries压缩源代码,不包括二进制文件
【发布时间】:2016-09-02 08:22:02
【问题描述】:

我想为我们的构建服务器(Windows 机器)编写一个脚本。

其中一部分是提取二进制文件并删除所有调试文件。我已经有代码了。

第二部分是获取项目(WPF)的源文件并对其进行压缩,不包括/bin/和/obj/文件夹。

到目前为止我得到的是:

#
# Get and zip Sourcefiles
#

# Get relevant folders and files
[string[]]$FolderExcludes = @('*bin*', '*obj*')

$Folders = Get-ChildItem -Directory -Recurse -Exclude $FolderExcludes | %{ 
    $allowed = $true
    foreach ($exclude in $FolderExcludes) { 
        if ((Split-Path $_.FullName -Parent) -ilike $exclude) { 
            $allowed = $false
            break
        }
    }
    if ($allowed) {
        $_
    }
}

[string[]]$FileExcludes = @('*.git*', 'sonar-project.properties')

$Files = $Folders | Get-ChildItem -File | %{
    $allowed = $true

    foreach ($exclude in $FileExcludes) { 
        if ($_.Name -ilike $exclude) { 
            $allowed = $false
            break
        }
    }
    if ($allowed) {
        $_.FullName
    }
}

$Files

文件列表包含我要压缩的所有文件。但是当我这样做时

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
$Files | %{ sz a -mx=9 "$SourcePath\$ArtifactPath.zip" $_ }

它获取所有文件并将它们放入根目录。

当我尝试压缩文件夹时,7zip 会获取所有文件夹,包括 bin 和 obj 并包括隐藏的 .git 文件夹(我们不倾向于随源代码一起发布)。

那么如何在没有 bin/obj 文件夹且不破坏 zip 文件路径的情况下压缩源文件?

顺便说一句,我尝试在构建过程之后删除文件夹并将二进制文件复制到其导出文件夹后,但 powershell 似乎保存了这些文件,所以我当时无法删除它:(

一个更愚蠢的想法是复制所有这些并删除那里的 bin 和 obj 文件夹..但这似乎效率很低。

而且我不需要使用 7zip。我对winzip或其他任何东西都很好。只是想压缩源代码。

【问题讨论】:

  • 您使用的 PS 版本。 PS 5 原生支持使用 compress-archive 和 expand-archive cmdlet 进行 zip 归档。
  • 是的,我使用的是 PS 5(Windows 10,还不是 1607)。 compress-archive 除了命令还有什么用处吗?

标签: powershell


【解决方案1】:

在超级用户上查看此答案:https://superuser.com/a/97347/440614

set-alias sz "$env:ProgramFiles\7-Zip\7z.exe"
sz a -mx=9 "$SourcePath\$ArtifactPath.zip" FolderToArchive\ -mx0 -xr!bin -xr!obj -xr!.git, -xr!sonar-project.properties

...可能需要调整,但应该会给你一个好的开始。

【讨论】:

  • 我看到了这样的命令,但它们不起作用.. 但我稍后会尝试并标记为解决方案,如果它有效。谢谢!
  • 这有效:sz a -mx=9 "$SourcePath\$ArtifactPath.zip" .\ -xr!bin -xr!obj -xr!"$ArtifactPath" -xr0!"$ArtifactPath.zip.tmp" -xr0!".git" -xr0!".gitignore" -xr0!".gitmodules" -xr0!"sonar-project.properties" 它不会复制具有确切名称“obj”和“bin”的文件夹或文件,它也不会复制隐藏的“.git”文件夹或全部第一级目录中的其他文件(0 标志)。奇迹般有效。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 2021-02-03
相关资源
最近更新 更多