【问题标题】: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】:
在上述正则表达式中排除nbproject 和darcs 目录的方式相同。在最后一行之前的任意位置添加此行:
(gaeunit/.*)|
【解决方案2】:
我的 app.yaml 看起来像这样:
skip_files:
- ^(.*/)?#.*#
- ^(.*/)?.*~
- ^(.*/)?.*\.py[co]
- ^(.*/)?.*/RCS/.*
- ^(.*/)?\..*
- ^(statistics/.*)
- ^(unittests/.*)
- ^(webtests/.*)
【解决方案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/...,即使您忽略了某些目录/文件。不过这些文件不会上传到谷歌。