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

时间:2015-12-26 09:07:55

标签: 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时,我添加一个跳过规则,匹配所有不包含此路径的dirPath:

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下。我尝试了绝对路由正则表达式的各种排列,但无济于事。

我应该做什么呢?或者这超出了msdeploy的可能性?

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

1 个答案:

答案 0 :(得分:0)

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

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