March 25, 2022
Перенос всех своих файлов на Общие диски Гугла
Transfer google drive files to shared drive (team drive) — App Google Script
Гугл закрывает Google G Suite и люди переезжают в иные места, а чтобы перенести файлы между доменами или разными пространствами Google Workspace необходимо залить файлы на общий диск.
DRIVE_FOLDER_ID = '111aaa'; // Идентификатор папки на общем диске куда переносим // Перенос не всех файлов, а общих с другими колегами // если хоть один пользователь имеет права на редактирование документа, то доступ будет передан иначе будет пропущен var CHECK_EDITORS = false; var EDITORS = [ '[email protected]', '[email protected]', '[email protected]', '[email protected]' ]; // находит файлы для переноса, делает нужные проверки и запускает перенос function move() { var files = DriveApp.searchFiles('"me" in owners'); while (files.hasNext()) { var file = files.next(); // console.info("Old path: ", getFullPath(file)); var fileEditors = file.getEditors().map(function(x) { return x.getEmail().toLowerCase(); }); if (!CHECK_EDITORS || fileEditors.some(function(e){return EDITORS.indexOf(e) != -1;}) ) { newPath = fileMoveWithPath(file, DRIVE_FOLDER_ID); if (newPath) console.info("New path: ", getFullPath(newPath)); } } } // Перенос файла с предварительным function fileMoveWithPath(file, root) { var folders = [], parent = file.getParents(); // Проходим по иерархии папок текущего файла до корня while (parent.hasNext()) { parent = parent.next(); folders.push(parent); parent = parent.getParents(); } if (folders.length > 0) targetPath = makeNewPath(folders, DriveApp.getFolderById(root)); else targetPath = DriveApp.getFolderById(root); if (targetPath) { try { targetFile = file.moveTo(targetPath); } catch (e) { console.error("Error path: ", getFullPath(file)); return; } return targetFile; }; return; } // рекурсивно создает полный путь из массива. Работает справа налево. Возвращает конечную папку. function makeNewPath(folders, newroot) { var f = folders.pop(); var query = "'" + newroot.getId() + "' in parents and title = '" + f.getName() + "' and mimeType='application/vnd.google-apps.folder' " var targetFolder = DriveApp.searchFolders(query); if (targetFolder.hasNext()) targetFolder = targetFolder.next() else targetFolder = newroot.createFolder(f.getName()); if (folders.length > 0) return makeNewPath(folders, targetFolder) else return targetFolder; } // Возвращает строку полного пути к файлу или папке function getFullPath(file) { var folders = [], parent = file.getParents(); while (parent.hasNext()) { parent = parent.next(); folders.push(parent.getName()); parent = parent.getParents(); } if (folders.length) { return '> /' + folders.reverse().join("/") + '/' + file.getName(); } return '> /' + file.getName(); }