皆さんは、Googleドライブのフォルダを丸ごと別のフォルダにコピーしたいと思ったことはありませんか?
例えば、プロジェクト管理のためにテンプレートフォルダを毎回コピーしたり、同じ構成のフォルダを複数作成したりといったケースは多いでしょう。
しかし、Googleドライブの標準的な機能では、フォルダを丸ごと一度にコピーすることはできません。
そこで今日は、Google Apps Scriptを用いてGoogleドライブのフォルダを丸ごと別のフォルダにコピーする方法について説明します。
プロジェクトのテンプレートとなるフォルダなど、特定のソースフォルダを、目的のターゲットフォルダにコピーするスクリプトを作成しましょう。
1. copyTemplate関数
function copyTemplate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
この行は、現在開いている(アクティブな)スプレッドシートを取得します。
var sheet = ss.getActiveSheet();
アクティブなスプレッドシートの中で現在選択されているシートを取得します。
var targetFolderId = sheet.getRange('A1').getValue();
アクティブなシートのA1セルに書かれている値(ここではターゲットフォルダのID)を取得します。
var sourceFolderId = 'source-folder-id';
ここではソースフォルダのIDをハードコーディングしています。
実際は、このIDを具体的なソースフォルダのIDに置き換える必要があります。
var sourceFolder = DriveApp.getFolderById(sourceFolderId);
var targetFolder = DriveApp.getFolderById(targetFolderId);
ソースフォルダとターゲットフォルダの両方を、それぞれのIDを使って取得します。
copyFolder(sourceFolder, targetFolder);
}
`copyFolder`関数を呼び出して、ソースフォルダの内容をターゲットフォルダにコピーします。
2. copyFolder関数
function copyFolder(sourceFolder, targetFolder) {
var folders = sourceFolder.getFolders();
var files = sourceFolder.getFiles();
ソースフォルダ内のすべてのフォルダとファイルを取得します。
while(files.hasNext()) {
var file = files.next();
file.makeCopy(file.getName(), targetFolder);
}
ソースフォルダ内のすべてのファイルを順番に取得し、そのファイルをターゲットフォルダにコピーします。
while(folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
var targetSubFolder = targetFolder.createFolder(folderName);
copyFolder(subFolder, targetSubFolder);
}
}
ソースフォルダ内のすべてのサブフォルダを順番に取得し、それぞれのサブフォルダに対して、その名前を使ってターゲットフォルダ内に新しいフォルダを作成します。
そして、再帰的に`copyFolder`関数を呼び出し、サブフォルダの内容を新しく作成したターゲットのサブフォルダにコピーします。
まとめ
以上のコードを用いて、Googleドライブのフォルダを丸ごと別のフォルダにコピーするスクリプトが完成しました。
フォルダのコピーは、ファイルだけでなくサブフォルダも含めて行われ、その結果ターゲットフォルダにはソースフォルダの完全なコピーが作成されます。
スプレッドシートの特定のセルにターゲットフォルダのIDを入力するだけで、テンプレートとなるフォルダを簡単にコピーできるようになります。
しかし、Google Apps ScriptのDriveAppの制限により、このコードではファイルやフォルダのアクセス権や共有設定など、特定のメタデータはコピーされません。
必要に応じて、さらなるカスタマイズを加えて使用してください。
以下は、ソースコードのまとめです。
このコードを利用し、Googleドライブ内で効率的にフォルダのコピー・管理を行いましょう。
function copyTemplate() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var targetFolderId = sheet.getRange('A1').getValue(); // ターゲットフォルダのIDはセルA1に入力してください
var sourceFolderId = 'source-folder-id'; // テンプレートフォルダのIDをここに入力してください
var sourceFolder = DriveApp.getFolderById(sourceFolderId);
var targetFolder = DriveApp.getFolderById(targetFolderId);
copyFolder(sourceFolder, targetFolder);
}
function copyFolder(sourceFolder, targetFolder) {
var folders = sourceFolder.getFolders();
var files = sourceFolder.getFiles();
while(files.hasNext()) {
var file = files.next();
file.makeCopy(file.getName(), targetFolder);
}
while(folders.hasNext()) {
var subFolder = folders.next();
var folderName = subFolder.getName();
var targetSubFolder = targetFolder.createFolder(folderName);
copyFolder(subFolder, targetSubFolder);
}
}