web-dev-qa-db-ja.com

Googleドライブでフォルダーを複製できますか?

Googleドライブのフォルダー全体を週に1回複製する必要があります。フォルダーには約25個のファイルがあります。これを行う簡単な方法は何ですか?

44
Dude2012

PCでGoogleドライブアプリケーションを使用している場合、Googleドライブディレクトリ内のフォルダをコピーして貼り付けると、コピーされます。 Webアプリケーションからこれを行うことができるとは思わない。

19
ComputerLocus

この問題に対処するためだけにApp Scriptを作成しました。フォルダーの内容とその構造をコピーできます。スクリプトは、Googleドライブデスクトップアプリの必要性を排除するのに役立ちます。トリガーを追加すると、プロセスを自動化することもできます。

GDriveコピーフォルダー構造/コンテンツスクリプト

Copy Folder Structure in Google Drive

ご注意ください :

  • これにより、すべてのサブフォルダーに接尾辞_copyが追加されます
  • folder_you_want_copied_copyはGoogleドライブの最上位の親階層にあるため、ドライブのサブフォルダーをコピーした場合、コピー時に最上位にバブルアップします
10

Googleドライブのウェブインターフェースを使用している場合...

  1. 新しいフォルダーを作成し、好きな名前を付けます。

  2. 既存のフォルダに移動して、すべてのファイルを選択し、右クリックしてコピーを押します。

  3. すべてのコピーを選択し、右クリックして[移動]をクリックします。新しいフォルダを選択します。

コピーするフォルダにサブフォルダがある場合、このメソッドは機能しないことに注意してください。

5
Brandon

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());
  }

}
3
Engineer Toast

OPへの非常に遅い答え、そして私は尋ねる時点でさえ可能ではないと思いますが、これは今日私がしていることです:

  1. 複製するフォルダーを選択します。
  2. 二次的にそれをクリックし、ポップアップメニューから「ダウンロード」を選択します
  3. ブラウザーでzipアーカイブを一時ディレクトリに保存します
  4. アーカイブからフォルダーを抽出し、新しい名前を付けます
  5. ドライブに戻ります。大きな青い[新規]ボタンをクリックし、ドロップダウンメニューから[フォルダのアップロード]を選択します。
  6. コンピューターに戻ります。新しく名前が付けられたフォルダーを取得して、ドライブにドラッグして戻します。
  7. トイレを流す

注:これは、小さな圧縮ファイルを一緒に作成する小さなファイルとサブフォルダーが多数ある場合の解決策です。圧縮ファイルの合計サイズが大きくなると、有用性が低下します。

3
Martin Bramwell

Googleスプレッドシートの「 Copy Folder 」アドオンを使用できます。

  1. googleスプレッドシートを作成する
  2. Add-ons > Get add-onsをクリックして、「フォルダのコピー」アドオンを追加します `
  3. コピーするフォルダーを選択します
  4. やった

ビデオチュートリアル を参照してください。

または、 this chrome web store Google App Script を使用してこの結果を得ることができます。これは、Googleスプレッドシートの作成を必要としません。

3
abbood

私は複数のマシンを使用していますが、それらすべてにドライブアプリを配置したくないので、サイトにコピーする以下のスクリプトを作成しました。くて基本的ですが、動作します。フォルダーとそのファイルのみをコピーし、サブフォルダーはコピーしません。改善の余地があると確信していますので、お気軽にこれを受け取って改善してください。しかし、少なくとも最初から役立つことを願っています。

以下のコメントによると、これはGoogle Appsスクリプトです。これを使用する方法は、Googleスクリプトアプリを開き、すべてのコードをコピーして空のスクリプトに貼り付けることです。その後、メニューの公開オプションをクリックして、Webアプリとして展開を選択します。次に、最新のコードリンクをクリックするか、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
Lucky 711