Как сделать gsutil cp -R, игнорируя такие файлы, как .git, .gitignore?

Я пытаюсь автоматизировать процесс синхронизации своих веб-ресурсов с Google Cloud Storage. В основном мне нужно скопировать все в моем каталоге разработки в облако. Однако мне нужно игнорировать каталог .git и некоторые другие не относящиеся к делу файлы.

Я не могу просто сделать gsutil cp -R . <dest>, потому что для этого нужно абсолютно все, включая .git. Я пробовал find . | fgrep git | gsutil cp -I <dest>, но это сглаживает все каталоги и помещает их в корень!

Есть ли способ решить эту проблему с помощью gsutil или мне нужно выполнить цикл в сценарии, который загружает все каталоги (кроме .git) с помощью -R, а затем загружает отдельные файлы в текущий каталог?


person Shahbaz    schedule 28.03.2014    source источник
comment
Возможный дубликат rsync не будет исключать скрытые файлы в gsutil 4.15.   -  person mimming    schedule 30.12.2015


Ответы (2)


У вас есть два варианта:

A) Удалите файлы git после их загрузки:

gsutil rm gs://bucket/\*.git\*

B) Используйте find для исключения файлов git:

find . -not -path '*/.git' -type f -printf '%P\n' | xargs -I '{}' gsutil cp '{}' gs://bucket/'{}'

Источник: https://groups.google.com/forum/#!topic/gsutil-discuss/zoHhkTPhiNc

Было бы намного проще, если бы gsutil реализовал rsync, это было бы проще с флагом --exclude.

person Aziz Saleh    schedule 28.03.2014

Вы можете использовать команду вроде:

gsutil rsync -x '\.git.*' dev_dir gs://your-bucket

См. Хранилище Google – rsync – синхронизация содержимого двух сегментов/каталогов.

person Mike Schwartz    schedule 03.08.2015
comment
Это подходящий ответ. Не знаю, почему за это проголосовали. - person sirugh; 18.01.2016