Je dois dupliquer un dossier complet sur mon Google Drive une fois par semaine. Il y a environ 25 fichiers dans le dossier. Quel est un moyen facile de faire cela?
Si vous utilisez l'application Google Drive sur votre PC, vous pouvez copier et coller le dossier dans le répertoire Google Drive, ce qui le copierait. Je ne crois pas qu'il soit possible de le faire à partir de l'application Web.
Vous avez écrit un script d'application juste pour résoudre ce problème. Vous pouvez copier n'importe quel contenu de dossier ainsi que sa structure. Le script aidera à éliminer le besoin d’application de bureau Google Drive. En ajoutant des déclencheurs, vous pouvez même automatiser le processus.
Script de contenu/structure de dossier GDrive Copy
Notez s'il vous plaît :
_copy
à tous les sous-dossiersfolder_you_want_copied_copy
se trouve dans la hiérarchie parent la plus élevée de votre Google Drive. Par conséquent, si vous avez copié un sous-dossier de votre lecteur, il bouillonnera au plus haut niveau lors de la copie.Si vous êtes dans l'interface Web de Google Drive ...
Créez un nouveau dossier et nommez-le comme vous voulez.
Allez dans le dossier pré-existant, sélectionnez tous les fichiers, cliquez avec le bouton droit et appuyez sur copier.
Sélectionnez toutes les copies, cliquez avec le bouton droit de la souris et cliquez sur déplacer pour. Sélectionnez le nouveau dossier.
Notez que cette méthode ne fonctionnera pas si le dossier que vous souhaitez copier contient des sous-dossiers.
Je préfère m'abstenir d'autoriser des tiers à accéder à mon Drive à moins que je ne le sois obligé, comme Lucky 711 , j'ai écrit mon propre script. Je le laisse ici pour les futurs aventuriers des résultats Google. Il va copier le dossier et tout son contenu. Pour mon cas d'utilisation, je l'ai écrit pour gérer les fichiers avec plusieurs parents en ajoutant simplement le dossier copié en tant que nouveau parent. Si vous ne le souhaitez pas, supprimez la partie "Compter les parents qui ne sont pas ce parent".
function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {
var folderToCopy = DriveApp.getFolderById(folderToCopyId);
var newParentFolder = DriveApp.getFolderById(newParentFolderId);
// Create the copy of the folder
var newFolder = newParentFolder.createFolder(newFolderName);
// Copy all the files in that folder
var files = folderToCopy.getFiles();
while (files.hasNext()) {
var file = files.next();
// Count the parents that aren't this parent
var countOfOtherParents = 0;
var parents = file.getParents();
while (parents.hasNext()) {
var parent = parents.next();
if (parent.getId() !== folderToCopyId) { countOfOtherParents++; }
}
// If it's unique, then copy it. Otherwise, just add it to the new parent.
if (countOfOtherParents == 0) {
file.makeCopy(file.getName(),newFolder);
} else {
newFolder.addFile(file);
}
}
// Copy all the subfolders in that folder
var folders = folderToCopy.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
}
}
Pour référence, si vous voulez créer de nouvelles copies de fichiers avec plusieurs parents plutôt que de simplement ajouter le nouveau dossier en tant que autre parent, le code le plus court ressemblera à ceci:
function copyFolderAndContentsToFolder(folderToCopyId, newParentFolderId, newFolderName) {
var folderToCopy = DriveApp.getFolderById(folderToCopyId);
var newParentFolder = DriveApp.getFolderById(newParentFolderId);
// Create the copy of the folder
var newFolder = newParentFolder.createFolder(newFolderName);
// Copy all the files in that folder
var files = folderToCopy.getFiles();
while (files.hasNext()) {
var file = files.next();
file.makeCopy(file.getName(),newFolder);
}
// Copy all the subfolders in that folder
var folders = folderToCopy.getFolders();
while (folders.hasNext()) {
var folder = folders.next();
copyFolderAndContentsToFolder(folder.getId(), newFolder.getId(), folder.getName());
}
}
Réponse très tardive pour le PO, et je pense même pas possible au moment de demander, mais c'est ce que je fais aujourd'hui:
Remarque: C'est une solution lorsque vous avez beaucoup de petits fichiers et sous-dossiers qui forment ensemble un fichier compressé de taille réduite. Son utilité diminue à mesure que la taille totale du fichier compressé augmente.
Vous pouvez utiliser le module complémentaire " Copier le dossier " pour Google Spreadsheets:
Add-ons > Get add-ons
et ajoutez l'add-on 'Copier dossier'Voir le tutoriel vidéo .
Ou, ce chrome script Web App Google store peut être utilisé pour obtenir ce résultat. Celui-ci ne nécessite pas la création d'une feuille de calcul Google.
J'utilise plusieurs machines et je ne veux pas installer l'application de lecteur sur toutes les machines. J'ai donc écrit le script ci-dessous pour le copier sur le site. C’est moche et basique mais ça marche. Il ne copie qu'un dossier et ses fichiers, pas des sous-dossiers. Je suis sûr que des améliorations sont possibles, alors n'hésitez pas à prendre cela et à l’améliorer, mais j’espère que cela sera au moins utile dès le début.
Par un commentaire ci-dessous, il s'agit d'un script Google Apps. La façon de l'utiliser consiste à ouvrir l'application de script Google, puis à copier et coller tout le code dans un script vierge. Après cela, cliquez sur l'option de publication dans le menu, puis sélectionnez déployer en tant qu'application Web. Vous pouvez ensuite cliquer sur le lien Dernier code ou copier et coller l'URL dans votre navigateur. Ensuite, vous trouverez une boîte où vous pouvez taper le dossier que vous souhaitez copier et le bouton de copie. Cela devrait créer une copie du dossier que vous avez nommé et une copie de tous les fichiers qu’elle contient.
Remarque: il ne copiera pas les sous-dossiers, mais uniquement les fichiers.
function doGet()
{
// Build UI
// Create UI object
var copyUI = UiApp.createApplication();
// Create Input box referenced later by the name explicitly set below
var userInput = copyUI.createTextBox().setName("textbox1");
//create button
var enterButton = copyUI.createButton("copy");
// add all objects to UI object
copyUI.add(userInput).add(enterButton);
//Create clicke event handeler and add input field to handeler
var clickHandler = copyUI.createServerHandler('onClick')
.addCallbackElement(userInput);
// add handelrer to the copy button
enterButton.addClickHandler(clickHandler);
// instantiate GUI
return copyUI;
}
function onClick(e)
{
// call currently active application/gui
var app = UiApp.getActiveApplication();
//Pass in the value of the e paramater named 'textbox1'
var input = e.parameter.textbox1;
// log value passed in from user input
//Logger.log(input);
// perform file copy
CopyFile(input);
}
function CopyFile(filename)
{
// declaire variables
var newFolder_String;
var newFolder;
var originalFolder;
var fileArray;
var loopCount;
var arrayLength;
var newFile;
// get original folder id
originalFolder = DocsList.getFolder(filename);
Logger.log(originalFolder.getId());
// create new "copy" folder using: createFolder(<filename>_copy)
newFolder_String = filename + "_Copy";
Logger.log(newFolder_String);
newFolder = DocsList.createFolder(newFolder_String);
// get folders and files from original file using:
// getFiles() from original file into an array
fileArray = originalFolder.getFiles();
// Copy files into folder:
arrayLength = fileArray.length;
loopCount = 0;
// looping through array of file
for (loopCount = 0; loopCount < arrayLength; loopCount++)
{
// create file copies using: file[i].makeCopy() and newFile.addToFolder(CopyFolder)
newFile = fileArray[loopCount].makeCopy();
Logger.log(newFile.getName());
newFile.addToFolder(newFolder)
}
}