ESP32-CAMで自動的に撮影した写真を Google Drive に転送するシステムを紹介しました。
しかし、このままではファイルが膨大になり、グーグルドライブの既定量(15GB)をオーバーする可能性があります。
そこで、一定の期間を経過したファイルを自動的に削除するスクリプトを紹介します。
一定期間を経過したファイルを削除する
このままではファイル数が膨大になり、ドライブを圧迫します。
そこで、一定期間が経過したファイルを自動的にゴミ箱へ送るスクリプトを作ってみました。
「abc」の部分を削除したいフォルダ名を入力し、軽か日数を入力するだけです。
スクリプトを用意する
Google Drive にアクセスしてAppを起動します。
Google Drive → 「+新規」→ その他→ Google Apps Script → 下記のスクリプトをコピペ→ 「無題のスクリプト」をクリックして適当な名前をつける→ プロジェクトを保存
これで、とりあえずスクリプトは完成です。
function trashTemporaryFile() { function deleteOldFiles() { var folderName = "ESP32-CAM"; // 対象のフォルダ名 var daysThreshold = 30; // ゴミ箱に送る期間の閾値(30日以上経過したファイル) var folder = DriveApp.getFoldersByName(folderName).next(); var files = folder.getFiles(); var now = new Date(); while (files.hasNext()) { var file = files.next(); var createdDate = file.getDateCreated(); var daysPassed = Math.floor((now - createdDate) / (1000 * 60 * 60 * 24)); // 日数の差分を計算 if (daysPassed >= daysThreshold) { file.setTrashed(true); // ゴミ箱に送る } // 処理時間を監視し、制限時間を超えたら処理を終了する if (new Date() - now >= 240000) { // 240秒(30000ミリ秒)を制限時間とする ScriptApp.newTrigger("deleteOldFiles") // トリガーの再設定 .timeBased() .after(1) // 1ミリ秒後に再実行 .create(); break; } } }
削除スクリプトの発動条件を設定する
後は、トリガーを設定して削除プログラムが発動するタイミングを設定します。
時計のアイコンをクリック → トリガーを追加
設定するのは「時間ベースのトリガーのタイプを選択」で「日付ベースのタイマー」を選択して「時刻の設定」で良いでしょう。
毎日、決められた時間に今回作成したスクリプトが起動します。
念のため、エラーの通知をONにしておきます。
グーグルドライブの自動削除プログラムまとめ
これで一定期間を経過したファイルが自動的にゴミ箱に送られます。
なお、Google Drive の仕様でゴミ箱に送られたファイルは、30日を経過すると自動で削除されるので、ゴミ箱が圧迫される心配はありません。
ファイルの量が多くなると、上手く削除できない場合があります。 そうした場合は、日に2回程度発動ようにトリガーを設定したり、日本時間の夕方に発動すると改善される場合があります。(これは感覚です(笑))
追記1
タイムアウトの対策はできましたが、トリガー数のエラーが出現しました。 ファイル数が多くなると稀にエラーが出るようです。
トリガー数の対策版をつくってみました。
【GoogleDrive】自動ファイル削除でタイムアウトする場合の対応方法
追記2
最終版?ともいえる安定板を公開します。
タイムアウト対策で1回の処理で100件に制限しています。 その代わりにトリガーを2時間おきに設定してエラー時に次のトリガーでフォローします。
【最終版?】GoogleDriveに保存したファイルの自動削除プログラム
コメント