Google Drive : comment transférer la propriété de fichiers entre des domaines différents et sans perdre les URLs ? 2/2

2
120

J’exposais dans un précédent article différentes méthodes pour transférer la propriété de plusieurs dossiers d’un compte gmail.com à un compte Workspace. J’en étais arrivé à la solution du déplacement du contenu vers un Drive partagé, qui fonctionne pour les fichiers mais pas pour les dossiers, ce qui oblige à recréer l’arborescence manuellement. Voici à présent le script qui m’a permis d’automatiser cette tâche.

Script pour déplacer un dossier d’un compte gmail.com vers un Drive partagé d’un compte Workspace

préparation

  • Créez depuis le compte cible un Drive partagé.
  • Nommez le compte gmail.com source comme membre administrateur de contenus.
  • Récupérez l’ID du dossier source et celui du dossier Cible.
  • Créez un script depuis le compte source.
  • Collez le script ci-dessous, recopiez les ID dans la fonction launchMoveFiles.
  • Exécutez le script.

Attention, ce script déplace des fichiers d’un compte gmail.com vers un Drive partagé, la propriété des fichiers va être transférée et cette action n’est pas annulable. Numericoach décline toute responsabilité sur les conséquences de l’utilisation de ce script.

Conseils :

  • Créez un dossier test, avec des sous-dossiers et des fichiers.
  • Faites-vous accompagner : 1 heure de coaching pour transférer vos fichiers en toute sécurité.

script :

/*****
 * 
 * @authour: antoine.martin@amcms.net 
 * @owner: numericoach 
 * @date: 2021 
 * 
 * tous droits reservés
 * 
 ****/
 const userEmail = Session.getUser().getEmail(); 
function launchMoveFiles()
{
const folderSourceParentId = "COPIER_ICI_L_ID_DOSSIER_SOURCE"; 
const folderCibleParentId = "COPIER_ICI_L_ID_DOSSIER_CIBLE"; 

moveFiles(folderSourceParentId, folderCibleParentId); 
}

function moveFiles(folderSourceParentId, folderCibleParentId) {
  // ACTIVER LES DOSSIERS
  const folderSourceParent = DriveApp.getFolderById(folderSourceParentId);
  const folderCibleParent = DriveApp.getFolderById(folderCibleParentId);

  // COPIER TOUS LES FICHIERS DU DOSSIER SOURCE DANS LE DOSSIER CIBLE
  const filesSource = folderSourceParent.getFiles();
  while (filesSource.hasNext()) {
    const thisFile = filesSource.next();
    let ownerName = "";
      if (thisFile.getOwner() != "null") {
        ownerName = thisFile.getOwner().getEmail();
      }

     if (ownerName == userEmail ) {

          thisFile.moveTo(folderCibleParent);

      }
  }

  // LISTER LES DOSSIERS DU DOSSIER SOURCE
  const foldersSource = folderSourceParent.getFolders();
  while (foldersSource.hasNext()) {
    const thisFolderSource = foldersSource.next();
    const thisFolderSourceName = thisFolderSource.getName();
    const thisFolderSourceId = thisFolderSource.getId();
  
    const thisFoldersCible = folderCibleParent.getFoldersByName(thisFolderSourceName);
 
    let thisFolderCibleId = "";

    if (thisFoldersCible.hasNext()) {
      // si un dossier enfant du dossier cible portant le même nom existe : récupérer l'ID
      thisFolderCibleId = thisFoldersCible.next().getId();

      Logger.log("Le dossier " + thisFolderSourceName + " existe déjà");

    }
    else {
      // si aucun dossier enfant du dossier cible de porte le même nom : créer et nommer un dossier comme dans source
      thisFolderCibleId = folderCibleParent.createFolder(thisFolderSourceName).getId();

      Logger.log("Le dossier " + thisFolderSourceName + " est créé.");
    }

    // Répéter la fonction dans les dossiers enfant source et cible 
    moveFiles(thisFolderSourceId, thisFolderCibleId);

  }
}

La première fonction lance la boucle à partir des deux ID des dossiers racines.

La deuxième fonction :

  • Déplace les fichiers un à un du dossier source vers le dossier cible.
  • Liste chaque dossier « enfant » du dossier source, créé son clone dans le dossier cible s’il n’existe pas.
  • Rejoue la même fonction entre le dossier enfant source et le dossier enfant cible.

Merci pour vos retours sur l’utilisation de ce script. N’hésitez pas à nous contacter pour plus de précisions ou pour un accompagnement personnalisé en fonction de vos besoins.

Attention :

  1. Mise à jour du 4 juin 2021 : Après une tentative sur un très gros dossier, il est apparu indispensable de vérifier que le fichier appartienne bien au compte utilisateur pour avoir le droit de le déplacer dans un Drive partagé et ainsi transférer la propriété.
  2. Prendre en compte le délai d’exécution d’un script maximal de 6 minutes sur un compte gmail.com. N’hésitez pas à nous contacter pour déplacer des dossiers volumineux qui nécessiteraient plus de temps.

Si vous avez trouvé une faute d’orthographe, veuillez nous en informer en sélectionnant le texte en question et en appuyant sur Ctrl + Entrée .

- Accompagnement professionnel ? -Formation professionnelle et services Google Workspace

2 Commentaires

  1. Avez-vous testé le comportement des « fichiers multi-emplacements » (shift+Z, j’imagine non préservés) vs « Drive shortcuts » (j’imagine préservés)?

    • Bonjour, Emmanuel. pour l’instant le script a fait ses preuves uniquement sur les fichiers présents dans les dossiers. Il n’y avait pas de raccourcis. Mais si vous testez vous pourrez nous dire si ça fonctionne ?
      Bonne journée

LAISSER UN COMMENTAIRE

S'il vous plaît entrez votre commentaire!
S'il vous plaît entrez votre nom ici

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.