最終更新日時からN時間以上経過したファイルを削除するGoogle Apps Scriptです。GASが自動的に吐き出すログファイルや、不要なファイルの一括削除に使えます。「削除」といってもゴミ箱へ移動する処理なので、誤って実行しても復元が可能です。
このスクリプトは特定のGoogle Drive フォルダを対象に動作します。
削除したいファイルが入っているフォルダのURLを取得します。
ファイルが入っているフォルダを開いて、アドレスバーに表示されているURLをコピーしてください。
きちんと動作するかどうか確認するため、昨晩編集したファイルと今作ったばかりのファイルがあるフォルダを指定します。
スクリプトを起動します。
メニューから「最終更新日時からN時間以上経過したものを削除」を実行します。
書き換え対象のURLが聞かれますので、STEP1でコピーしたURLを入力します。
時間を整数で入力します。
たとえば「24」と入力すると、最終更新日時が24時間以上前のファイルが削除対象になります。
しばらく待つと完了メッセージが表示されます。
削除されたファイルが1つもなければ「条件に合うファイルはありませんでした。」が表示されます。
1つ以上のファイルが削除されれば「N件のファイルを削除しました。誤って消した場合はゴミ箱から復元してください。」が表示されます。
削除対象にしたフォルダを確認して、ファイルが削除されていることを確認してみてください。
今回は昨晩編集したファイルを削除対象にしたので、さきほど作ったばかりのファイルは削除されずに残っています。
もし反映されていない場合はリロードすることで反映されるはずです。
/**
* このスクリプトの説明、使い方はこちら。
* https://myfunc.jp/items/00027/index.html
*/
function onOpen() {
// スプレッドシートを開いたときに実行される関数
var ui = SpreadsheetApp.getUi()
// メニューの表示名
var menu = ui.createMenu('スクリプト実行');
// メニューに追加するボタン
menu.addItem('最終更新日時からN時間以上経過したものを削除', 'delete_files_hours_passed_lastupdate');
// メニューを画面に追加する
menu.addToUi();
}
function delete_files_hours_passed_lastupdate() {
// UIを取得
const ui = SpreadsheetApp.getUi();
// URLを入力する
const url = ui.prompt('対象のフォルダURLを入力してください', ui.ButtonSet.OK_CANCEL);
// キャンセルが押されたら終了する
if (url.getSelectedButton() == ui.Button.CANCEL) {
return;
}
// URLを入力する
const hours = ui.prompt('時間を入力してください(24と入力したら最終更新日時が24時間以上前のファイルが全て削除されます)', ui.ButtonSet.OK_CANCEL);
// キャンセルが押されたら終了する
if (hours.getSelectedButton() == ui.Button.CANCEL) {
return;
}
// 時間が整数以外で入力されたらエラーを出して終了する
if (!hours.getResponseText().match(/[0-9]+/)) {
ui.alert('時間は1以上の整数で入力してください');
return;
} else if (hours.getResponseText() < 1) {
ui.alert('時間は1以上の整数で入力してください');
return;
}
// URLからフォルダIDを取得する
// https://drive.google.com/drive/folders/この部分がID
const drive_id = url.getResponseText().match(/^.*\/folders\/(.+)$/)[1];
// フォルダを取得する
const folder = DriveApp.getFolderById(drive_id);
// フォルダ内のファイルを取得する
const files = folder.getFiles();
// 削除した件数を記録する変数を用意
let delete_counter = 0;
// ファイルの数だけループ処理する
while (files.hasNext()) {
// ファイルを取得
let file = files.next();
// ファイルの作成日を取得(ミリ秒)
let file_created_date = file.getLastUpdated();
// 現在の時間を取得(ミリ秒)
let date_now = new Date();
// 差分を計算し「時」に直す
let diff = (date_now - file_created_date) / 1000 / 60 / 60;
// 入力された時間を経過していればゴミ箱に移動し、削除件数を1加算する。
if (diff > hours.getResponseText()) {
file.setTrashed(true);
delete_counter++;
}
}
// 完了メッセージの表示
if (delete_counter > 0) {
ui.alert(delete_counter + '件のファイルを削除しました。誤って消した場合はゴミ箱から復元してください。');
} else {
ui.alert('条件に合うファイルはありませんでした。');
}
}
指定したフォルダ内のすべてのファイルに、プレフィックス(接頭辞)を付与するGoogle Apps Scriptです。例えばスマホで撮影した写真のファイル名に「yyyy/mm/dd 運動会_元のファイル名.jpg」のように変更することができます。
フォルダ内のすべてのファイルを対象に、ファイル名の一部を消すことが出来るGoogle Apps Scriptです。ドライブでファイルのコピーをすると「のコピー」が付与されますがこのような文字列を消すことができます。
ファイル名の先頭にファイルの作成日を追加するGoogle Apps Scriptです。ドライブのファイル一覧で表示されるのは「最終更新日」だけで、作成日は各ファイルをクリックして右ペインを見ないとわかりません。わからないならファイル名に追加してしまおうというスクリプトです。「yyyy-mm-dd_元のファイル名」のように変えることができます。
指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。最終更新日時やオーナー、URLも出力するのでフォルダ整理する時に使えるかも。
指定したファイルを指定した回数だけコピーするGoogle Apps Scriptです。テンプレートを受講者分コピーしたいときなどに。
シートに記載したファイルURLを元に、親フォルダの名前とURLを出力するGoogle Apps Scriptです。
Googleドライブ上でファイル名が重複しているものを探すGoogle Apps Scriptです。同じ名前のファイルに苦しめられている方、いかがですか?
シートにGoogleドライブのファイル(URL)を記載すると、そのファイルを削除してくれるGoogle Apps Scriptです。