如何在使用gsutil到rsync时排除隐藏的文件和目录?
问题描述:
我有一个目录结构的Jekyll博客,其中包含许多隐藏文件和目录,如.DS_Store
,.idea
和.git
。它还具有中间构建工件和脚本,以_
开头,如_deploy.sh
和_drafts
。如何在使用gsutil到rsync时排除隐藏的文件和目录?
我想编写一个脚本,将所有内容上传到Google云端存储中的存储桶,但这些隐藏文件和下划线工件除外。
我试过使用-x
标志,但是我的表达式排除了整个当前目录,并且什么也没有上传,或者未能排除我想要排除的一些内容。
这是我到目前为止有:
#!/bin/sh
gsutil -m rsync -rx '\..*|./[.].*$|_*' ./ gs://my-bucket.com/path
和输出我观察:
$ ./_deployblog.sh
Building synchronization state...
Starting synchronization
答
一系列真正具体的正则表达式的解决了这个问题:
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
不适用于我。仍在同步.git文件夹 –