我有一个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
答案 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