使用gsutil到rsync时如何排除隐藏文件和目录?

时间:2016-02-04 20:12:00

标签: jekyll google-cloud-storage google-cloud-platform gsutil

我有一个Jekyll博客,其目录结构包含许多隐藏文件和目录,如.DS_Store.idea.git。它还具有以_开头的中间构建工件和脚本,如_deploy.sh_drafts

我想编写一个脚本,将所有内容上传到Google云端存储上的存储桶,但这些隐藏文件和下划线工件除外。

我已尝试使用-x标记,但我的表达式要么排除整个当前目录,要么不上传任何内容,要么无法排除我想要排除的某些内容。

这是我到目前为止所拥有的:

#!/bin/sh
gsutil -m rsync -rx '\..*|./[.].*$|_*' ./ gs://my-bucket.com/path

我正在观察的输出:

$  ./_deployblog.sh
Building synchronization state...
Starting synchronization

1 个答案:

答案 0 :(得分:2)

一系列非常具体的正则表达式解决了这个问题:

gsutil -m rsync -rdx '\..*|.*/\.[^/]*$|.*/\..*/.*$|_.*' . gs://my-bucket.com/path

排除模式有4个由|个字符分隔的组件。

\..*        <- excludes .files and .directories in the current directory
.*/\.[^/]*$ <- excludes .files in subdirectories
.*/\..*/.*$ <- excludes .directories in subdirectories
_.*         <- excludes _files and _directories