GAS

GASでGoogle Drive のフォルダ配下のオーナー権限を一括で譲渡する処理(ついでにゴミ箱も空にする)

現場を退場する際にGoogleドライブの整理を求められました。
手動で整理するのが面倒だったので作成したスクリプトをメモ…

やりたいこと

・ファイルのオーナー権限を譲渡
・ドライブのゴミ箱を空にする

前提条件

・Google workspaceを利用していること
・譲渡先のアカウントが同じグループに所属していること

ちゃんと検証してないけど、Google wokspaceのアカウントじゃないとオーナー権限を付与するsetOwner()が動かないっぽい…

コード

サービスからDrive APIを有効にした状態で下記コードを設定

const FOLDER_ID = "オーナ権限を譲渡したいファイルをまとめたフォルダID";
const NEW_OWNER = "オーナ権限の譲渡先のメールアドレス";
const me = Session.getActiveUser().getEmail();

//--------------------------------------------------オーナ権限の譲渡
function changeOwner() {
  const folder = DriveApp.getFolderById(FOLDER_ID);
  setOwner(folder);

  let files = folder.searchFiles('"me" in owners');
  //ファイルを変更
  while (files.hasNext()) {
    let file = files.next();
    console.log('file: ', file.getName());
    setOwner(file);
  }
  //フォルダを変更
  let folders = folder.getFolders();
  while (folders.hasNext()) {
    let folder = folders.next();
    console.log('folder: ', folder.getName());
    setOwner(folder);
  }
}
function setOwner(data) {
  if (data.getOwner().getEmail() === me) {
    data.setOwner(NEW_OWNER);
  }
}
//--------------------------------------------------ドライブのゴミ箱内のファイルを完全に削除する
function deleteTrashedFiles() {
  let files = DriveApp.getTrashedFiles();
  let folders = DriveApp.getTrashedFolders();
  deleatFile(files);
  deleatFile(folders);
}
function deleatFile (contents){
  while(contents.hasNext()) {
    let file = contents.next();
    let id = file.getId();
    Logger.log(file.getName());// 削除されるファイル
    Drive.Files.remove(id);
  }
}

使い方

定数のFOLDER_IDNEW_OWNERを設定後、下記の関数を実行する
changeOwner()実行でオーナー権限譲渡
deleteTrashedFiles()実行でゴミ箱のデータ削除

ABOUT ME
ytakeuchi
都内在住のフロントエンドエンジニア。2016年からフリーランスとして活動中。座右の銘は「昨日よりも楽に」。好きな言葉は「効率化」。こんな性格なのでプライベートではGoogle Apps Scriptばかり触っています。