【问题标题】:Powershell - Compress files based on the contents of another zip filePowershell - 根据另一个 zip 文件的内容压缩文件
【发布时间】:2021-01-09 12:39:12
【问题描述】:

我有一个 zip 文件,必须解压缩到目标文件夹。在我提取之前,我想仅备份根文件和将通过提取 zip 文件替换的子目录。

我可以编写一个脚本来找出 .zip 中的子目录并从目标文件夹中备份这些子目录(如果有的话)?

我将在 Azure DevOps 中使用这个脚本。

【问题讨论】:

  • 所以要检查所有的 zip 内容并在之前备份吗?
  • @ShaykiAbramczyk 是的 :)

标签: powershell azure-devops compression azure-pipelines compress-archive


【解决方案1】:

您可以使用 PowerShell 发现 zip 文件内容,检查它是否存在于目标文件夹中,如果存在 - 进行备份。例如:

$ZipFilePath = "C:\Users\sabramczyk\Documents\Scrum.zip"
$DestinationFolder = "c:\test"

Add-Type -assembly "System.IO.Compression.FileSystem"
    
if (![System.IO.File]::Exists($ZipFilePath)) {
    throw "Zip file ""$ZipFilePath"" not found."
}

$ZipContent = ([System.IO.Compression.ZipFile]::OpenRead($ZipFilePath)).Entries.FullName
foreach($zipContent in $ZipContent)
{
    if(Test-Path $DestinationFolder+"/"+$zipContent)
    {
        # Do backup
    }
}

【讨论】:

  • 这是完美的 :) 谢谢...我尝试使用 copy-item 将这些文件备份到单独的文件夹中,但无法保留目录结构。 Copy-Item -Path $FullFilePath -Destination $(ReleaseClientWorkFolder)\$(Build.DefinitionName)\$(Build.BuildNumber)\PreReleaseCopies\CISIWeb2\$zipContent
  • 什么是$FullFilePath?我不完全理解这个问题......
  • $FullFilePath is C:\inetpub\wwwroot\MyWeb2\bin\AjaxControlToolkit.dll 例如,当我将其复制到 D:\Backup\MyWeb2 时,复制的文件始终位于root,我希望文件保持相同的目录结构。所以我希望将文件复制到 D:\Backup\MyWeb2\bin\AjaxControlToolkit.dll。
  • 尝试将结构附加到备份文件夹路径或仅复制文件夹(包含文件)而不是单个文件
  • 在copy-item之前做一个new-item解决了这个问题(stackoverflow.com/questions/48027762/…)谢谢大家的帮助:)
【解决方案2】:

最简单的方法是将文件从 zip 中提取到某个临时文件夹(在 Azure DevOps 上,它可能是此变量 Agent.TempDirectory 后面的文件夹)。然后,您可以将要备份的文件复制到另一个位置,例如$(Agent.TempDirectory)/backup,然后打包此文件夹并放入Build.ArtifactStagingDirectory,如果您想发布它们。在此之后,您可以再次将 zip 解压缩到您的目的地,因为您已经有了备份。

如果您想了解有关上述文件夹的更多信息,您可能会发现此documentation 很有用。

【讨论】:

  • 我可以做到,但是目标文件夹有大量目录和内容。我不想备份所有内容。
  • @Muhammedh 是的,这就是为什么我建议您将其解压缩到像$(Agent.TempDirectory)/MyCleanFolder 这样的清理文件夹中,并仅获取您需要备份的文件。最后提取到您的目标文件夹。但是创建备份的干净文件夹不是您的目标文件夹。
  • @krzysztof-medej 我如何知道要备份哪些文件?我想获取我将要替换的文件夹列表。
  • 好的。我明白了,所以你不知道目标文件夹中有什么。对于该部分,请检查此stackoverflow.com/questions/6526441/…
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多