Googleドライブをご利用の方、ファイルのコピーは出来るけどフォルダやフォルダ(サブフォルダ含む)をコピーすることはできません。
フォルダ作成してひとつづつファイルをコピーする方法はありますが、プロジェクトで利用している場合は相当なフォルダ数とファイル数になり手動で行えば数日かかるのでは?
でも一括でコピーしたい。
となると取れる方法は2つほど。
①GAS(Google App Script)でコードを作成して作る。
②コピーツールを購入する。
②は知識無くても簡単ですが、そんな選択肢を進めるのであればこの記事を書く意味もなくなります。なので①を選択。
スクリプトが作れる人は良いのですが、そんな知識ありませんという方でも問題ありません。
Googleのツールを作りたいならGoogleに任せればよいのです。
という事でGoogle Geminiを利用して作ってもらいましょう。
前提条件
Googleアカウント(無料でも良いのですがファイルが大量であれば有料アカウントにしないと制限される可能性あり)保有
コピー先のGoogleドライブを用意
テキストエディタを用意(メモ張)
①コピー元とコピー先のフォルダIDをテキストエディタにコピーしておきます。
例)~.google.com/drive/folders/XXXXXXXXXXXXXXXX(このfolders以下がID)
②Geminiにアクセスして聞く
例)googleドライブのフォルダ(サブフォルダ含む)を一括でコピーして複製したいのでGASで実行できるコードを作成してください。
↑これでも作ってくれるのですが、エラー発生時のエラー表示なんかも条件として追記しておくと良いと思います。
下のようにコードを作成してくれますのでJavaScriptの右側にあるコピーボタンでコピー
③GASにアクセス
アクセス自体はGASと検索すると出てくるので割愛
新しいプロジェクトをクリックしてください。
新しいプロジェクトをクリックしたページ
この画面で右側にある1行目のfunction myFunction~3行目の}を選択して先ほどGeminiで作成してもらったスクリプトを貼り付けます。
貼り付けたら、指示に従いコピー元のフォルダIDとコピー先のフォルダIDを入力して保存します。
※画面は保存した後の画面なので「実行」ボタン左側にあるボタンで保存してください。(タイトルもわかるようにした方が良いですね。)
保存したら「実行」ボタンをクリックするとコピーが開始されます。
画面下部に実行処理やエラーが発生した時にエラー表示してくれますので後は待つだけ、フォルダ(サブフォルダ含む)を一括で複製してくれます。
ちなみに、ファイル数や容量が多いと数十分かかることもありますがその間は放置です。
今回、Geminiが生成したコードは下記です。下記をコピーしてGASに張り付けてID入力して実行でも良いのですが詳細などみなさん異なるでしょうから条件をしっかり設定してGeminiで生成した方が良いと思います。
※コピー元及びコピー先について権限が無いとアクセスできませんので必ずアクセスする権限は確認してください。
Geminiで生成されたコードはこちら
/**
* Google Driveのフォルダ(サブフォルダ含む)を再帰的にコピーする
*/
function copyFolderRecursive() {
// --- 設定 ---
// コピー元フォルダのIDをここに設定/folders/以下がID
const sourceFolderId = '【ここにコピー元フォルダのIDを入力】';
// コピー先フォルダのIDをここに設定
// コピー先フォルダは事前にGoogle Drive上に作成しておく必要があります。
const destinationFolderId = '【ここにコピー先フォルダのIDを入力】';
// コピー元フォルダの直下に新しいフォルダ名でコピーを作成したい場合は、
// destinationFolderId を sourceFolderId と同じIDにし、
// newFolderName に新しいフォルダ名を設定してください。
// 例: const newFolderName = '複製されたフォルダ名';
// --- 実行 ---
try {
const sourceFolder = DriveApp.getFolderById(sourceFolderId);
const destinationFolder = DriveApp.getFolderById(destinationFolderId);
// 新しいフォルダ名を設定する場合
// if (newFolderName) {
// const newFolder = destinationFolder.createFolder(newFolderName);
// copyContents(sourceFolder, newFolder);
// Logger.log(`フォルダ '${sourceFolder.getName()}' を '${newFolderName}' として複製しました。`);
// } else {
copyContents(sourceFolder, destinationFolder);
Logger.log(`フォルダ '${sourceFolder.getName()}' の内容をフォルダ '${destinationFolder.getName()}' に複製しました。`);
// }
} catch (e) {
Logger.log('エラーが発生しました: ' + e.toString());
}
}
/**
* フォルダの内容をコピー(ファイルとサブフォルダ)
* @param {GoogleAppsScript.Drive.Folder} source - コピー元フォルダ
* @param {GoogleAppsScript.Drive.Folder} destination - コピー先フォルダ
*/
function copyContents(source, destination) {
// 1. ファイルのコピー
const files = source.getFiles();
while (files.hasNext()) {
const file = files.next();
// ファイルをコピーし、新しいフォルダに追加
file.makeCopy(file.getName(), destination);
}
// 2. サブフォルダを再帰的にコピー
const folders = source.getFolders();
while (folders.hasNext()) {
const subFolder = folders.next();
// コピー先フォルダに新しいサブフォルダを作成
const newSubFolder = destination.createFolder(subFolder.getName());
// 新しく作成したサブフォルダに対して再帰的に処理
copyContents(subFolder, newSubFolder);
}
}
いかがでしょうか?こんな感じでプログラムの知識無くてもGeminiとGASを利用すれば時間を短縮して作業効率化が図れます。
保存したGASのプロジェクトは共有できますので私の場合はフォルダIDを固定せず都度設定できるように保存して共有フォルダに保存しています。