regex - 如何跳过删除除指定文件夹以外的文件夹以进行 Web 部署 (msdeploy) 同步?

标签 regex msdeploy webdeploy microsoft-web-deploy

假设我有一个如下所示的目标文件夹结构:

D:\DEPLOY\DEST
│   0.txt
│
├───a
│       a.txt
│
└───b
    ├───b1
    │   │   b1.txt
    │   │
    │   ├───b1a
    │   │       b1a.txt
    │   │
    │   └───b1b
    │           b1b.txt
    │
    └───b2
            b2.txt

我还有一个 source 文件夹结构,如下所示:

D:\DEPLOY\SOURCE
└───b
    └───b1
        └───b1a
                b1a-new.txt

我想将同步到目标,但只能在\b\\b1\b1a 路径下。为此,在运行 MSDeploy 时,我添加了一个跳过规则,匹配所有不包含此路径的 dirPaths:

msdeploy -verb:sync 
         -source:contentPath=D:\deploy\source
         -dest:contentPath=D:\deploy\dest
         -skip:skipAction=delete,objectName=dirPath,absolutePath='(?!\\b\\b1\\b1a)'
         -whatif

导致:

Info: Deleting file (D:\deploy\dest\0.txt).
Info: Deleting file (D:\deploy\dest\b\b1\b1.txt).
Info: Adding file (D:\deploy\dest\b\b1\b1a\b1a-new.txt).
Info: Deleting file (D:\deploy\dest\b\b1\b1a\b1a.txt).
Total changes: 4 (1 added, 3 deleted, 0 updated, 0 parameters changed, 0 bytes copied)

令我惊讶的是,这超出了预期。 MSDeploy 还删除了文件 0.txtb1.txt,它们位于我希望根据正则表达式跳过的 dirPath 下。我尝试了 absolutePath 正则表达式的各种排列,但无济于事。

我应该怎么做?还是这超出了 msdeploy 的可能性?

注意:这个例子是简化的。实际上我的来源是包,而不是 contentPath。这就是为什么在 b\b1\b1a 级同步的明显答案不适用的原因。

最佳答案

您已指定您不希望它删除该文件夹外的目录,但您的跳过规则没有提及文件。只需从您的 skip 指令中删除 ,objectName=dirPath ,它将跳过对任何提供程序的删除。

顺便说一句,跳过规则的行为实际上非常微妙。我有一篇深入研究它的博客文章,可能会有所帮助:Demystifying MSDeploy skip rules

关于regex - 如何跳过删除除指定文件夹以外的文件夹以进行 Web 部署 (msdeploy) 同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469944/

相关文章:

iis - VS2012 Web Deploy Package 创建应用程序池

webdeploy - 混合 web.config 转换和 Parameters.xml,或者类似的东西

ruby-on-rails - 正则表达式:匹配排他性的非此即彼

javascript - JS 正则表达式删除类型转换

php - 用于确定字符串特定特征的正则表达式(即扑克牌)

asp.net - MsBuild 和 MsDeploy 之间的区别

deployment - 如何执行自动化部署 - 使用 Pull 模型

.net-4.0 - 如何将标记化参数添加到 web.config 文件中,以便它显示在 SetParameters.xml 中?

asp.net-core - 无法在 IIS7 上加载托管 ASP.NET Core 2.2 的 aspnetcorev2.dll

mysql - 在类似mysql的查询中包含点运算符