Preciso duplicar uma pasta inteira no meu Google Drive uma vez por semana. Existem cerca de 25 arquivos na pasta. Qual é uma maneira fácil de fazer isso?
Preciso duplicar uma pasta inteira no meu Google Drive uma vez por semana. Existem cerca de 25 arquivos na pasta. Qual é uma maneira fácil de fazer isso?
Respostas:
Se você estiver usando o aplicativo Google Drive no seu PC, poderá copiar e colar a pasta no diretório do Google Drive, e isso poderá ser copiado. Não acredito que seja possível fazer isso a partir do aplicativo da web.
Escrevi um App Script apenas para resolver esse problema. Você pode copiar qualquer conteúdo da pasta, bem como a estrutura nela. O script ajudará a eliminar a necessidade do aplicativo de desktop do Google Drive. Ao adicionar gatilhos, você pode até automatizar o processo.
Estrutura de pastas de cópia do GDrive / Script de conteúdo
Observe :
_copy
a todas as subpastasfolder_you_want_copied_copy
está na hierarquia pai mais alta do seu Google Drive. Portanto, se você copiou uma subpasta da sua unidade, ela subirá para o nível mais alto quando copiadaSe você estiver na interface da web do Google Drive ...
Crie uma nova pasta e atribua o nome que você deseja.
Vá para a pasta pré-existente, selecione todos os arquivos, clique com o botão direito e clique em copiar.
Selecione todas as cópias, clique com o botão direito e pressione Mover para. Selecione a nova pasta.
Observe que esse método não funcionará se a pasta que você deseja copiar tiver subpastas.
Resposta muito tardia para o OP, e acho que nem é possível na hora de perguntar, mas é isso que faço hoje:
Nota: Esta é uma solução quando você tem muitos pequenos arquivos e subpastas que juntos criam um arquivo compactado pequeno. Sua utilidade diminui à medida que o tamanho total do arquivo compactado aumenta.
Prefiro me abster de permitir que terceiros acessem meu Drive, a menos que precise, como o Lucky 711 , escrevi meu próprio script. Deixo aqui para futuros aventureiros de resultados do Google. Ele copiará a pasta e todo o seu conteúdo. No meu caso de uso, escrevi para lidar com arquivos com vários pais, apenas adicionando a pasta copiada como um novo pai. Se você não quiser, solte a parte "Contar os pais que não são esse pai".
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());
}
}
Para referência, se você deseja criar novas cópias de arquivos com vários pais, em vez de apenas adicionar a nova pasta como outro pai, o código mais curto ficaria assim:
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());
}
}
1jVlkj------------------------Gk3D7
exceto que todos os traços são caracteres. Essa sequência sem sentido é o ID exclusivo que o Google atribuiu. Depois de ter as três entradas, você iria chamar esta função a partir de outra função com algo comocopyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
countOfOtherParents++;
linha e isso será suficiente. Para o meu caso de uso, eu queria explicitamente que esses arquivos obtivessem outro pai em vez de criar uma nova cópia do arquivo. Se você quer dizer arquivos que funcionam como hiperlinks que abrem outras pastas, então eu não sabia que você poderia fazer isso.
Você pode usar o complemento " Copiar pasta " para as planilhas do Google:
Add-ons > Get add-ons
e adicione o complemento 'Copy Folder' Veja o vídeo tutorial .
Ou, esse Google App Script da Chrome Web Store pode ser usado para alcançar esse resultado. Este não requer a criação de uma planilha do Google.
Eu uso várias máquinas e não quero colocar o aplicativo da unidade em todas elas, por isso escrevi o script abaixo para copiar no site. É feio e básico, mas funciona. Ele copia apenas uma pasta e seus arquivos, não subpastas. Tenho certeza de que há espaço para melhorias, portanto, fique à vontade para pegar e melhorar, mas espero que seja pelo menos útil desde o início.
Por um comentário abaixo, este é um script do Google Apps. A maneira de usá-lo é abrir o aplicativo de script do Google, copiar e colar todo o código em um script em branco. Depois disso, clique na opção de publicação no Menu e selecione implantar como aplicativo da web. Você pode clicar no link Código mais recente ou copiar e colar o URL no seu navegador. Em seguida, você encontrará uma caixa onde pode digitar a pasta que deseja copiar e o botão copiar. Isso deve criar uma cópia da pasta que você nomeou e uma cópia de todos os arquivos contidos.
Nota: não copiará subpastas, apenas os arquivos.
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)
}
}
Para duplicar uma pasta, arraste e solte-a em outra pasta segurando o botão CTRL.
Este é um aplicativo de macros do Google Script muito bom: https://script.google.com/macros/s/AKfycbxbGNGajrxv-HbX2sVY2OTu7yj9VvxlOMOeQblZFuq7rYm7uyo/exec
com registros em tempo real e seletor de pastas.