Googleドライブのフォルダー全体を週に1回複製する必要があります。フォルダーには約25個のファイルがあります。これを行う簡単な方法は何ですか?
PCでGoogleドライブアプリケーションを使用している場合、Googleドライブディレクトリ内のフォルダをコピーして貼り付けると、コピーされます。 Webアプリケーションからこれを行うことができるとは思わない。
この問題に対処するためだけにApp Scriptを作成しました。フォルダーの内容とその構造をコピーできます。スクリプトは、Googleドライブデスクトップアプリの必要性を排除するのに役立ちます。トリガーを追加すると、プロセスを自動化することもできます。
ご注意ください :
_copy
が追加されますfolder_you_want_copied_copy
はGoogleドライブの最上位の親階層にあるため、ドライブのサブフォルダーをコピーした場合、コピー時に最上位にバブルアップしますGoogleドライブのウェブインターフェースを使用している場合...
新しいフォルダーを作成し、好きな名前を付けます。
既存のフォルダに移動して、すべてのファイルを選択し、右クリックしてコピーを押します。
すべてのコピーを選択し、右クリックして[移動]をクリックします。新しいフォルダを選択します。
コピーするフォルダにサブフォルダがある場合、このメソッドは機能しないことに注意してください。
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());
}
}
OPへの非常に遅い答え、そして私は尋ねる時点でさえ可能ではないと思いますが、これは今日私がしていることです:
注:これは、小さな圧縮ファイルを一緒に作成する小さなファイルとサブフォルダーが多数ある場合の解決策です。圧縮ファイルの合計サイズが大きくなると、有用性が低下します。
Googleスプレッドシートの「 Copy Folder 」アドオンを使用できます。
Add-ons > Get add-ons
をクリックして、「フォルダのコピー」アドオンを追加します `ビデオチュートリアル を参照してください。
または、 this chrome web store Google App Script を使用してこの結果を得ることができます。これは、Googleスプレッドシートの作成を必要としません。
私は複数のマシンを使用していますが、それらすべてにドライブアプリを配置したくないので、サイトにコピーする以下のスクリプトを作成しました。くて基本的ですが、動作します。フォルダーとそのファイルのみをコピーし、サブフォルダーはコピーしません。改善の余地があると確信していますので、お気軽にこれを受け取って改善してください。しかし、少なくとも最初から役立つことを願っています。
以下のコメントによると、これは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)
}
}