Мне нужно дублировать всю папку на моем Google Диске раз в неделю. В папке около 25 файлов. Какой простой способ сделать это?
Мне нужно дублировать всю папку на моем Google Диске раз в неделю. В папке около 25 файлов. Какой простой способ сделать это?
Ответы:
Если вы используете приложение Google Drive на своем ПК, вы можете скопировать и вставить папку в каталог Google Drive, и это скопирует ее. Я не верю, что это можно сделать из веб-приложения.
Написали скрипт приложения только для решения этой проблемы. Вы можете скопировать любое содержимое папки, а также структуру в ней. Скрипт поможет избавиться от необходимости в настольном приложении Google Drive. Добавляя триггеры, вы даже можете автоматизировать процесс.
Структура папки копирования GDrive / скрипт содержимого
Пожалуйста, обратите внимание :
_copy
для всех вложенных папокfolder_you_want_copied_copy
самая верхняя родительская иерархия вашего Google Диска, поэтому, если вы скопировали подпапку вашего диска, при копировании она поднимется до самого высокого уровня.Если вы находитесь в веб-интерфейсе Google Drive ...
Создайте новую папку и назовите ее как хотите.
Перейдите в существующую папку, выберите все файлы, щелкните правой кнопкой мыши и нажмите «Копировать».
Выберите все копии, щелкните правой кнопкой мыши и нажмите «Переместить». Выберите новую папку.
Обратите внимание, что этот метод не будет работать, если папка, которую вы хотите скопировать, имеет подпапки.
Очень поздний ответ для ОП, и я думаю, что даже невозможно во время запроса, но это то, что я делаю сегодня:
Примечание. Это решение, когда у вас много маленьких файлов и подпапок, которые вместе образуют небольшой сжатый файл. Его полезность уменьшается с увеличением общего размера сжатого файла.
Я предпочитаю воздерживаться от предоставления доступа третьим сторонам к моему Диску, если мне не нужно, как, например, Lucky 711 , я написал свой собственный сценарий. Я оставляю это здесь для будущих искателей результатов Google. Он скопирует папку и все ее содержимое. Для моего случая использования я написал его для обработки файлов с несколькими родителями, просто добавив скопированную папку в качестве нового родителя. Если вы не хотите этого, удалите часть «Подсчитать родителей, которые не являются этими родителями».
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());
}
}
Для справки: если вы хотите создавать новые копии файлов с несколькими родителями, а не просто добавлять новую папку в качестве другого родителя, более короткий код будет выглядеть следующим образом:
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
за исключением того, что все тире являются символами. Эта бессмысленная строка является уникальным идентификатором, назначенным Google. Если у вас есть три входа, вы вызываете эту функцию из другой функции с чем-то вродеcopyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
countOfOtherParents++;
строку, и это будет сделано. Для моего случая использования я явно хотел, чтобы эти файлы просто получали другого родителя, а не создавали новую копию файла. Если вы имеете в виду файлы, которые действуют как гиперссылки, открывающие другие папки, то я не знал, что вы могли бы это сделать.
Вы можете использовать надстройку « Копировать папку » для таблиц Google:
Add-ons > Get add-ons
и добавьте надстройку «Копировать папку» Смотрите видеоурок .
Или этот Chrome веб-магазин Google App Script может быть использован для достижения этого результата. Этот не требует создания электронной таблицы Google.
Я использую несколько машин и не хочу ставить приложение на все они, поэтому я написал нижеприведенный скрипт для копирования на сайте. Это некрасиво и просто, но работает. Он только копирует папку и ее файлы, а не подпапки. Я уверен, что есть возможности для улучшений, поэтому не стесняйтесь использовать это и улучшать его, но я надеюсь, что это по крайней мере полезно с самого начала.
Согласно комментарию ниже, это скрипт Google Apps. Чтобы использовать его, нужно открыть приложение сценариев Google, а затем скопировать и вставить весь код в пустой сценарий. После этого нажмите опцию публикации в меню, затем выберите развертывание как веб-приложение. Затем вы можете щелкнуть ссылку «Последний код» или скопировать и вставить URL-адрес в браузер. Затем вы найдете поле, в котором вы можете ввести папку, которую вы хотите скопировать, и кнопку копирования. Это должно создать копию папки, которую вы назвали, и копию всех файлов внутри.
Примечание: он не будет копировать подпапки, а только файлы.
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)
}
}
Чтобы скопировать папку, перетащите ее в другую папку, удерживая кнопку CTRL.
Это очень хорошее приложение для макросов Google Script: https://script.google.com/macros/s/AKfycbxbGNGajrxv-HbX2sVY2OTu7yj9VvxlOMOeQblZFuq7rYm7uyo/exec
с журналами в реальном времени и селектором папок.