【问题标题】:How do I extend a regular expression to exclude all files in a folder?如何扩展正则表达式以排除文件夹中的所有文件?
【发布时间】:2012-02-11 22:24:38
【问题描述】:

在我的 Google App Engine 项目的 app.yaml 文件中,有一个 skip_files 部分用于将给定类型的文件排除在上传之外。如何扩展此正则表达式以排除整个 gaeunit 目录被上传?

skip_files: |
    ^(.*/)?(
    (app\.yaml)|
    (index\.yaml)|
    (\..*)|
    (.*\.pyc)|
    (.*\.bat)|
    (.*\.psd)|
    (Thumbs.db)|
    (.*\.svn/.*)|
    (.*\.lnk)|
    (.*\.datastore)|
    (_darcs/.*)|
    (nbproject/.*)|
    (.*\.swp)|
    (.*\.log)|
    )$

【问题讨论】:

    标签: python regex google-app-engine


    【解决方案1】:

    在上述正则表达式中排除nbprojectdarcs 目录的方式相同。在最后一行之前的任意位置添加此行:

    (gaeunit/.*)|
    

    【讨论】:

      【解决方案2】:

      我的 app.yaml 看起来像这样:

      skip_files:
      - ^(.*/)?#.*#
      - ^(.*/)?.*~
      - ^(.*/)?.*\.py[co]
      - ^(.*/)?.*/RCS/.*
      - ^(.*/)?\..*
      - ^(statistics/.*)
      - ^(unittests/.*)
      - ^(webtests/.*)
      

      【讨论】:

      • 不确定是否需要。
      • 无论如何,最后 3 个都不是。
      【解决方案3】:

      对于一个新应用程序(在撰写本文时),您可以简单地将目录名称放在尾部斜杠(如 app.yaml docs 所示)

      所以您的 app.yaml 可能如下所示: skip_files: - node_modules/ - ^(.*/)?app\.yaml - ^(.*/)?app\.yml - ^(.*/)?index\.yaml - ^(.*/)?index\.yml ...

      但是,当试图忽略像 node_modules 这样的大目录时,您会发现以下内容更容易处理:(- ^node_modules/*.*)。当使用 gcloud app deploy 进行部署时,此解决方案将打印一条很好的消息,例如 INFO: Ignoring directory [node_modules]: Directory matches ignore regex.

      不幸的是,gcloud app deploy 仍会将部署目录中的所有文件本地复制到 /var/folders/...,即使您忽略了某些目录/文件。不过这些文件不会上传到谷歌。

      【讨论】: