2021/11/29に更新

【GASで時短】更新からN時間以上経過したファイルを削除する

ドライブ

最終更新日時からN時間以上経過したファイルを削除するGoogle Apps Scriptです。GASが自動的に吐き出すログファイルや、不要なファイルの一括削除に使えます。「削除」といってもゴミ箱へ移動する処理なので、誤って実行しても復元が可能です。

こんな悩みを解決します


  • 古いファイルをまとめて削除したい
  • GASが吐き出すファイルが大量に溜まってしまい、一定の期間が経過したものを削除したい

用意するもの


このスクリプトは特定のGoogle Drive フォルダを対象に動作します。

このスクリプトで出来ること


  • 指定されたフォルダに入っている「最終更新日時からN時間以上経過したもの」を削除することができます。
  • 「作成日」ではないのでご注意ください。
  • このスクリプトはファイルを完全に削除するものではなく、ゴミ箱へ移動する処理となります。誤って必要なファイルを消してしまった場合はゴミ箱から復元してください。

使い方


1.フォルダのURLを取得する

削除したいファイルが入っているフォルダのURLを取得します。
ファイルが入っているフォルダを開いて、アドレスバーに表示されているURLをコピーしてください。
きちんと動作するかどうか確認するため、昨晩編集したファイルと今作ったばかりのファイルがあるフォルダを指定します。

2.スクリプトの実行

スクリプトを起動します。
メニューから「最終更新日時からN時間以上経過したものを削除」を実行します。

3.URLの入力

書き換え対象のURLが聞かれますので、STEP1でコピーしたURLを入力します。

4.時間の入力

時間を整数で入力します。
たとえば「24」と入力すると、最終更新日時が24時間以上前のファイルが削除対象になります。

5.処理結果の確認

しばらく待つと完了メッセージが表示されます。
削除されたファイルが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('条件に合うファイルはありませんでした。');
  }
}

関連するアプリ


【GASで時短】ファイル名に文字列を追加する

指定したフォルダ内のすべてのファイルに、プレフィックス(接頭辞)を付与するGoogle Apps Scriptです。例えばスマホで撮影した写真のファイル名に「yyyy/mm/dd 運動会_元のファイル名.jpg」のように変更することができます。

【GASで時短】ファイル名の一部を削除する

フォルダ内のすべてのファイルを対象に、ファイル名の一部を消すことが出来るGoogle Apps Scriptです。ドライブでファイルのコピーをすると「のコピー」が付与されますがこのような文字列を消すことができます。

【GASで時短】ファイル名に作成日を追加する

ファイル名の先頭にファイルの作成日を追加するGoogle Apps Scriptです。ドライブのファイル一覧で表示されるのは「最終更新日」だけで、作成日は各ファイルをクリックして右ペインを見ないとわかりません。わからないならファイル名に追加してしまおうというスクリプトです。「yyyy-mm-dd_元のファイル名」のように変えることができます。

【GASで時短】ドライブのファイルリストをスプレッドシートに出力する

指定したGoogle ドライブのファイル一覧をスプレッドシートに出力するGoogle Apps Scriptです。最終更新日時やオーナー、URLも出力するのでフォルダ整理する時に使えるかも。

タグ一覧

最新のアプリ

人気のアプリ

myfunc.jp