Siit juhendist leiad juhised kuidas skripti abil kopeerida isiklikust drive'st kaustapuu UT Google Workspace shared drive'i.
Google Workspace for Education on Tartu Ülikoolis juurutamises. See tähendab, et need teenused on kasutatavad ainult osaliselt ja ligipääs on piiratud. Samuti on käesolevad juhendid pidevalt täienemas ning muutumas.
Eeldused
- Kõike järgnevat tuleb teha Google kasutajaga, kellel on vähemalt lugemisõigus kopeeritavale sisule
- Sellele kasutajale peab olema antud vähemalt Contributor taseme õigused Ülikooli Shared drive kettal
- Selleks pöördu kasutajatoe/moderaatori poole (vaja üle täpsustada)
Piirangud
- Varu aega - skript töötab aeglaselt
- Skript ei tee mingeid duplikaatide ega turvakontrolle ning tehtud ei ole põhjalikke testimisi
- Kopeerimine ei ole oma olemuselt destruktiivne (originaalid säilivad)
- Kui samanimeline kaust on juba sihtkohas olemas, luuakse uus kaust
- Kopeerimise käigus:
- Kopeeritavale sisule tekib ligipääs kõigile, kellel on ligipääs sihtkaustale/draivile
- Kõik eelnevad ligipääsud ning õigused kaovad
- Muutuvad kaustade ning failide lingid
- Kaovad failide versioonid ning ajalugu
- Rakenduvad Google drive ning Google API piirangud
- Shared drive limits
- Google Drive large migration best practices
- Olulisim piirang on see, et ühel kasutajal on ööpäevas võimalik üles laadida kuni 750GB andmeid
Mida teha
- Mine lehele https://script.google.com
- Vajuta vasakul üleval nurgas nuppu New project
- Soovi korral muuda ära projekti nimi
- Kustuta automatselt genereeritud skripti päis ning kopeeri allolev skript selle asemele
- Muuda skripti kolme esimest rida:
- email@domain.xxx → meiliaadress, kuhu saadetakse skripti logid
- sourcefolderID → kopeeritava kausta ID
- targetfolderID → sihtkausta või shared draivi ID
- ID saab aadressiribalt kui avada vastav kaust/draiv (nt: 1KMerSre4WcCl-5AfZIYkeMaG79GPSGIa)
- Salvesta projekt
- Vajuta ülemisest menüüst nuppu Run
- ...
- Profit
Kood
Code
function start() { //global variables to facilitate logging and email //Edit these 3 lines: var recipient1 = 'email@domain.xxx'; PropertiesService.getScriptProperties().setProperty('sourceFolderIdGlobal', 'sourcefolderID'); PropertiesService.getScriptProperties().setProperty('targetParentFolderIdGlobal', 'targetfolderID'); var recipient2 = recipient1; PropertiesService.getScriptProperties().setProperty('StartTime', new Date()); //get timestamp to record the intial execution time { // Google App Script to the rescue // Code adapted from this artcile https://www.labnol.org/code/19979-copy-folders-drive // Thank you Amit Agarwal https://github.com/labnol // This script will copy all files and folders from the source Folder ID to a Destination Folder ID // The Source Folder name will be created in the destination folder // If you have been driven insane by Google Drives inability to copy a folder structure from MyDrive to a Shared drive BOOM! // // Important note: Enable the Drive service in the script editor https://developers.google.com/apps-script/advanced/drive var sourceFolderId = PropertiesService.getScriptProperties().getProperty('sourceFolderIdGlobal'); //Folder ID of the folder structure you want to copy //Add target folder ID if you want the dest to be somewhere other than the root of Mydrive var targetParentFolderId = PropertiesService.getScriptProperties().getProperty('targetParentFolderIdGlobal'); var sourceFolder = DriveApp.getFolderById(sourceFolderId); //Source Folder if (targetParentFolderId.length > 0 ) { // If the target folder ID has been provided, create the target folder within that folder var targetParent = DriveApp.getFolderById(targetParentFolderId); //Parent Folder (target) Logger.log( "Create target folder: " + sourceFolder.getName() + " in " + targetParent.getName()); //copy console entry into stored logger var target = targetParent.createFolder(sourceFolder.getName()); //Create the source folder we are copying } else { // If the target folder ID is empty, create the target folder within the root of Mydrive Logger.log( "Create target folder in Mydrive: " + sourceFolder.getName()); //copy console entry into stored logger Logger.log( "Create target folder in Mydrive: " + sourceFolder.getName()); //copy console entry into stored logger var target = DriveApp.createFolder(sourceFolder.getName()); //Create the source folder } //Here we go Logger.clear; //Clear stored log data before next execution so we don't keep sending old data var recipient = recipient1; //Destination email address to notify that script has started (for triggered executions) var subject = 'MyDrive Copy Log'; var body = 'MyDrive Copy Started for folder pair: '+sourceFolderId+' to '+targetParentFolderId+"\n This script execution was started at "+ PropertiesService.getScriptProperties().getProperty('StartTime'); MailApp.sendEmail(recipient, subject, body); copyFolder(sourceFolder, target); Logger.log("Copy finish"); //copy console entry into stored logger var recipient = recipient2; //Destination email address to send final completion notice and the logged console data var subject = 'MyDrive Copy Log'; var body = 'MyDrive Copy finished at '+ new Date()+';'+" The execution log is as follows: \n" +Logger.getLog(); MailApp.sendEmail(recipient, subject, body); } } function copyFolder(source, target) { var folders = source.getFolders(); var files = source.getFiles(); while(files.hasNext()) { var file = files.next(); Logger.log( "Copying file: " + file.getName()); //copy console entry into stored logger file.makeCopy(file.getName(), target); } while(folders.hasNext()) { var subFolder = folders.next(); var folderName = subFolder.getName(); Logger.log( "Copying folder: " + folderName); //copy console entry into stored logger var targetFolder = target.createFolder(folderName); copyFolder(subFolder, targetFolder); } }
This page has no comments.