Glósóli

うーん

GAS で Google Drive 内の隠しファイル(ドットではじまるやつ)を全部消す

色々あって Google Drive 内で Mac の隠しファイル汚染がひどいことになっていた。

 f:id:yamatoiizuka:20190313114811p:plain

ほぼ全てのフォルダがこんな感じなのでどうにかしたい。楽な手段を調べたけど諦めが発生したので GAS を書いた。GAS、スポ根とか精神論とかそっち系な気がしてきた…

function myFunction() {
  var base_folder_id = "検索対象とするフォルダのID"; 
  var parent_folder = DriveApp.getFolderById(base_folder_id);
  removeHiddenFiles(parent_folder);
}

function removeHiddenFiles(folder) {
  var folders = folder.getFolders();
  var files = folder.getFiles();
  while (files.hasNext()) {
    var _file = files.next();
    var _file_name = _file.getName();
    if (_file_name.indexOf(".") == 0) {
      Logger.log("ファイル名: " + _file.getName());
      // ゴミ箱に移動する
      _file.setTrashed(true);
    }
  }

  while (folders.hasNext()) {
    var _folder = folders.next();
    // フォルダを再帰的に掘っていく
    removeHiddenFiles(_folder);
  }
}


f:id:yamatoiizuka:20190313115505p:plain

いい感じ。Google App Script の仕様上 6 分でタイムアウトするらしいのでフォルダの深掘りには注意。あと setTrashed はファイルのオーナー権持ってないと効果がないっぽいので、共有フォルダとかでなんとかしたい場合は removeFile あたりを使うと良さそうです(未検証)。

https://developers.google.com/apps-script/reference/drive/folder#removeFile(File)