Как исключить скрытые файлы и каталоги при использовании gsutil для rsync?

У меня есть блог Jekyll со структурой каталогов, которая содержит множество скрытых файлов и каталогов, таких как .DS_Store, .idea и .git. Он также имеет промежуточные артефакты сборки и сценарии, начинающиеся с _, такие как _deploy.sh и _drafts.

Я хочу написать скрипт, который загружает все в корзину в Google Cloud Storage, кроме этих скрытых файлов и подчеркнутых артефактов.

Я пробовал использовать флаг -x, но мои выражения либо исключают весь текущий каталог и ничего не загружают, либо не могут исключить часть содержимого, которое я хочу исключить.

Вот что у меня есть до сих пор:

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

И результат, который я наблюдаю:

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

person mimming    schedule 04.02.2016    source источник


Ответы (1)


Серия действительно конкретных регулярных выражений решает проблему:

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
person mimming    schedule 04.02.2016