#google-apps-script #google-drive-api #storage #google-drive-shared-drive
Вопрос:
Требования:
- У меня есть две учетные записи рабочего пространства для бизнеса с доменами A и B
- Мне нужно автоматически синхронизировать все в домене A для входа в систему с доменом B (если мгновенная синхронизация невозможна, также допускается один раз в день).
- причина: просто для резервного копирования, если учетная запись A не работает по каким-либо неожиданным причинам
Есть ли какой-нибудь способ, которым я мог бы это сделать? ( либо путем кодирования с помощью api, либо с использованием существующей службы )
=================================================================
- почему уже предоставленный ответ не является удовлетворительным?
- «Возможно, есть альтернативы» — это не точный ответ»
- вход в несколько учетных записей на Google диске для рабочего стола не является решением. Он просто монтирует два диска на ПК.
Комментарии:
1. Работает ли для вас общий доступ к папке? Вы не думали использовать инструмент «Диск для рабочего стола» для синхронизации обоих дисков с->из папки? Каков ваш вариант использования. Пожалуйста, будьте более подробны.
2. @Антенны, какая часть вопроса вас смущает? Я думаю, что это уже хорошо определено
3. @Привод антенн для рабочего стола не работает для 2 учетных записей
4. В настоящее время Google Диск для настольных компьютеров поддерживает несколько учетных записей.
5. Для этого нет канонического решения (по крайней мере, такого, о котором я знаю). Но вы можете попробовать поэкспериментировать с Push-уведомлениями API привода, они могут оказаться полезными при создании решения, соответствующего вашим требованиям.
Ответ №1:
Прежде всего позвольте мне заявить, что нет ничего из коробки, что позволило бы вам это сделать. Как вы и просили, возможные решения для кодирования.
Я делал что-то подобное в прошлом, только не с учетными записями рабочей области. TBH с рабочим пространством было бы проще.
Если бы я собирался сделать это снова с учетными записями рабочей области, вот что я бы сделал. Это предполагает, что у меня есть доступ администратора в обоих доменах рабочей области или доступ к администратору этого домена.
Это можно сделать на любом серверном языке программирования, для большинства из которых существуют клиентские библиотеки, поддерживающие учетные записи служб, C#, php, python и даже node.js.
Я бы создал учетные данные учетных записей служб в консоли разработчика Google. Затем я бы добавил учетную запись службы в качестве пользователей в обеих учетных записях рабочего пространства, предоставив им доступ к учетной записи диска. Технически, поскольку это односторонняя синхронизация из A в B, пользователю в рабочей области A требуется доступ только для чтения, однако нам потребуется доступ для чтения / записи в рабочую область B.
После этого у вас будет доступ.
Тогда это будет вопрос программирования.
Я бы выбрал все файлы и диск A, а затем сравнил их с диском B. Существует несколько способов сравнения, было ли что-то изменено или нет. Если файл был изменен, я бы предварительно сформировал обновление, если файл был создан, я бы вставил его.
С удалением все становится сложнее. Поскольку затем вам нужно будет выбрать все на диске B и посмотреть, существует ли оно в A, если это не так, файл следует удалить.
все, что можно сделать, — это просто сравнить все. Это может быть легко настроено как задание хрона.
То, что я делал раньше
Как вы и просили expect a working method instead of saying it is possible without any prove and reference
Было бы невозможно предоставить вам полностью рабочий метод, как вы просили, поскольку я не знаю языка программирования, который вы будете использовать, и у меня нет доступа к структуре ваших учетных записей дисков.
Кроме того, переполнение стека-это не сервис кодирования, но я рад дать вам небольшой толчок к дизайну.
Это общее представление о том, что я делал в прошлом.
file.list from drive A
Loop though each file
Compaire file from A to file from B
If file does not exist
File.insert to file B
If file does exist
Either check for change or just do file.update
File.list from drive B
Loop though each file
Compaire file from b to files from A
Does file not exist
Delete from b
Комментарии:
1. Ты считаешь это слишком легким делом. Диск имеет структуру каталогов. Кроме того, все дерево каталогов огромно, когда вы перечисляете файлы, некоторые из них, возможно, уже изменились. А временная сложность огромна, она составляет не менее O(n_square)
2. Как я наставлял, я уже делал это раньше для клиента. Насколько это было просто, я думаю, зависит от опыта разработчиков. Это может быть связано с тем фактом, что у меня двенадцатилетний опыт работы с API Google и двадцатипятилетний опыт программирования. Это действительно не такая уж трудная проблема для решения. но знание большой буквы о не очень помогает в решении проблем, но это только мое мнение.
3. Вы говорите о том, сколько у вас лет опыта, но на самом деле я говорю, что ваш ответ бесполезен. Поскольку «все знают, что синхронизация заключается в создании файла, если он еще не создан. Удалите файл, если он уже удален в исходном файле». Я уже пытался восстановить всю древовидную структуру раньше, это занимает очень много времени. Похоже, у вас нет опыта работы с API Google диска.
Ответ №2:
Простого способа сделать это нет, но это выполнимо. Есть пара шагов, которые вам нужно выполнить.
- Выполните начальную синхронизацию между двумя дисками. Для этого потребуется запустить скрипт, который заново создаст структуру папок на вашем диске B и скопирует все файлы туда. Если громкость высока, вам нужно будет убедиться, что ваш сценарий обходит максимально разрешенное время выполнения сценария (в вашем случае, вероятно, 30 минут). Я уже создавал такое решение в прошлом. У меня также есть история об обходе максимального времени выполнения на носителе, которая решает аналогичную проблему, если вам интересно.
- Регулярно синхронизируйте все изменения с API активности диска. Таким образом, вы не будете копировать все при каждой синхронизации, а только те файлы и папки, которые были обновлены, удалены или созданы.
Это нелегкое дело, но его определенно можно выполнить.