Можно ли скопировать папку на Google Диске?


44

Мне нужно дублировать всю папку на моем Google Диске раз в неделю. В папке около 25 файлов. Какой простой способ сделать это?


Из веб-интерфейса я предполагаю. Это будет академично, если вы используете клиент и синхронизируете его с папкой на вашем компьютере.
Эль

Вы хотите просто сохранить материал в этой папке? или вы пытаетесь добавить его в другой аккаунт Google? Вам нужно все содержимое папки или только указатели?
Уильям

Мне нужно было продублировать его, потому что я хочу иметь разные разрешения для них, для этого мне нужно иметь отдельные среды. Но использование Google Drive для ПК работало нормально!
Dude2012

Ответы:


19

Если вы используете приложение Google Drive на своем ПК, вы можете скопировать и вставить папку в каталог Google Drive, и это скопирует ее. Я не верю, что это можно сделать из веб-приложения.


4
К сожалению для пользователей Linux, до сегодняшнего дня у Google нет поддержки "Google Drive Application". Следовательно, им нужно использовать то, что называется « grive »
iammilind

Будет ли он повторно загружать всю новую папку в Интернет, или он знает, что содержимое папки идентично, и дублирует ее без полной повторной загрузки?
Джулиан

@Julian Я бы предположил, что это все перезагружает.
ComputerLocus

Я только что подтвердил, что он действительно перезагружает все файлы. Облом.
Джулиан

без приложения также можно щелкнуть правой кнопкой мыши - загрузить папку в виде zip и повторно загрузить ее после разархивирования
kamidude

10

Написали скрипт приложения только для решения этой проблемы. Вы можете скопировать любое содержимое папки, а также структуру в ней. Скрипт поможет избавиться от необходимости в настольном приложении Google Drive. Добавляя триггеры, вы даже можете автоматизировать процесс.

Структура папки копирования GDrive / скрипт содержимого

Копировать структуру папок в Google Drive

Пожалуйста, обратите внимание :

  • это также добавляет суффикс _copyдля всех вложенных папок
  • Это folder_you_want_copied_copyсамая верхняя родительская иерархия вашего Google Диска, поэтому, если вы скопировали подпапку вашего диска, при копировании она поднимется до самого высокого уровня.

Супер крутая функция, отлично работала даже для очень больших папок с сотнями подпапок и тысячами файлов (некоторые были очень большими). Спасибо, Шунму!
kubusz

3
также добавляет суффикс "_copy" ко всем подпапкам, yikes!
Манас

5

Если вы находитесь в веб-интерфейсе Google Drive ...

  1. Создайте новую папку и назовите ее как хотите.

  2. Перейдите в существующую папку, выберите все файлы, щелкните правой кнопкой мыши и нажмите «Копировать».

  3. Выберите все копии, щелкните правой кнопкой мыши и нажмите «Переместить». Выберите новую папку.

Обратите внимание, что этот метод не будет работать, если папка, которую вы хотите скопировать, имеет подпапки.


4
В контекстном меню нет опции «копировать». Есть "сделать копию". Что вы имеете в виду, сделайте копию всех файлов, затем выделите копии и переместите их в новую папку.
Blisterpeanuts

Также необходимо переименовать все файлы после перемещения их в новую папку, чтобы удалить префикс «Копия».
Том

Это приводит ко всем файлам, имеющим префикс «Copy of» к именам файлов.
Элайджа Линн

@Blisterpeanuts Также нет «сделать копию», если вы хотите скопировать папку - даже если она пуста. Досадно, если вы хотите начать с шаблона пустых имен каталогов
Майкл

Если вы перемещаете группу файлов с помощью перетаскивания, а при нажатии клавиши Ctrl рядом с указателем мыши появляется знак «+», и это, похоже, работает, но «скопированные» файлы - это просто жесткие ссылки , они имеют одинаковый идентификатор, и если вы их удалите, вы удалите их. и эту копию, и исходный файл , который необходимо восстановить после недавней активности. AFAIK это ошибка в Google Drive.
Пабло А

3

Очень поздний ответ для ОП, и я думаю, что даже невозможно во время запроса, но это то, что я делаю сегодня:

  1. Выберите папку, которую я хочу скопировать.
  2. Вторичный клик по нему, а затем выберите «Загрузить» из всплывающего меню
  3. Пусть мой браузер сохранит заархивированный архив во временную директорию
  4. Извлеките папку из архива и дайте ей новое имя
  5. Вернуться в Драйв; нажмите большую синюю кнопку «Создать» и выберите «Загрузка папки» в раскрывающемся меню.
  6. Вернуться в мой компьютер; возьмите только что названную папку и перетащите ее обратно на диск.
  7. Спустить воду в туалете

Примечание. Это решение, когда у вас много маленьких файлов и подпапок, которые вместе образуют небольшой сжатый файл. Его полезность уменьшается с увеличением общего размера сжатого файла.


1
Основная проблема этого решения - помимо очевидной необходимости иметь достаточно места для локального хранения всего содержимого вашего диска, дважды (как сжатого, так и извлеченного) - состоит в том, что если он будет экспортировать все документы Google в соответствующий формат документа MS OpenOffice, а затем когда вы перезагружаете их, вы должны конвертировать их обратно в форматы Google и решать все проблемы с форматированием, которые это вызывает.
Гусс

3

Я предпочитаю воздерживаться от предоставления доступа третьим сторонам к моему Диску, если мне не нужно, как, например, 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());
  }

}

Как вы запускаете этот скрипт? Или как вы получаете входные параметры?
Ройдуккей

Входные данные - это идентификатор папки, которую вы хотите скопировать, идентификатор папки, в которой вы хотите создать копию, и имя, которое вы хотите, чтобы копия была. Чтобы получить идентификатор папки, перейдите к ней и посмотрите на конец URL. Это, наверное, что-то вроде, 1jVlkj------------------------Gk3D7за исключением того, что все тире являются символами. Эта бессмысленная строка является уникальным идентификатором, назначенным Google. Если у вас есть три входа, вы вызываете эту функцию из другой функции с чем-то вродеcopyFolderAndContentsToFolder('superLongIdString','anotherLongIdString','NewFolderName')
Engineer Toast

Это почти идеально, но в моем случае у меня есть файлы, которые связаны с разными папками. Таким образом, вместо копирования файла, он просто копирует ссылку.
Ройдуккей

Если вы имеете в виду файлы, которые существуют в нескольких местах (т. Е. Имеют несколько родителей), это рассматривается в посте. Вы можете скопировать только countOfOtherParents++;строку, и это будет сделано. Для моего случая использования я явно хотел, чтобы эти файлы просто получали другого родителя, а не создавали новую копию файла. Если вы имеете в виду файлы, которые действуют как гиперссылки, открывающие другие папки, то я не знал, что вы могли бы это сделать.
Тост инженера

То есть минимальное изменение было бы таким, но код «чище» был бы таким
Engineer Toast

3

Вы можете использовать надстройку « Копировать папку » для таблиц Google:

  1. создать таблицу Google
  2. нажмите Add-ons > Get add-onsи добавьте надстройку «Копировать папку»
  3. выберите папку, которую хотите скопировать
  4. сделанный

Смотрите видеоурок .

Или этот Chrome веб-магазин Google App Script может быть использован для достижения этого результата. Этот не требует создания электронной таблицы Google.


7
Для этого необходимо разрешить надстройку «Просмотр и чтение вашей электронной почты»
Майкл Коул

@MichaelCole, а также другие проблемные разрешения: управление электронными таблицами, загрузка произвольных веб-сайтов и, что еще хуже, автономный доступ. Я не рекомендую никому устанавливать это, пока проблемы с разрешением не будут устранены.
Гусс

Ах .. это храбрый мир New Post из Кембриджа, в котором мы живем сейчас
abbood

Управление электронными таблицами заключается в добавлении файла журнала электронной таблицы во время его работы.
Аджай

@ Ajay Это было плохо. Спасибо за повторную отправку.
Джонска

1

Я использую несколько машин и не хочу ставить приложение на все они, поэтому я написал нижеприведенный скрипт для копирования на сайте. Это некрасиво и просто, но работает. Он только копирует папку и ее файлы, а не подпапки. Я уверен, что есть возможности для улучшений, поэтому не стесняйтесь использовать это и улучшать его, но я надеюсь, что это по крайней мере полезно с самого начала.

Согласно комментарию ниже, это скрипт 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)
  }

}

-1

Чтобы скопировать папку, перетащите ее в другую папку, удерживая кнопку CTRL.


9
Это не дублирует; он просто создает указатель. Я проверил это, выполнив Ctrl-drag-n-drop папки в нескольких разных местах, затем создал файл в папке, и файл виден в любом месте.
эль

Это верно. Они называют это «добавлением папки»
th3an0maly

4
-1, не работает.
Pacerier

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.