iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
IT 管理

30 天玩轉 GAS: 打造你的個人自動化助手系列 第 24

[Day 24] GAS - Google Drive 實戰演練 - 雲端硬碟清理小幫手

  • 分享至 

  • xImage
  •  

每次都把免費雲端空間的容量用到快爆炸嗎,何不用 GAS 來實作一個 「雲端硬碟清理小幫手」
我們可以利用 Google Apps Script 自動刪除過期、不再使用的檔案
並生成一個 google sheet 報告顯示哪些檔案已經刪除或即將清理,方便讓我們做檔案的管理!

那我們看看如何實作吧!

步驟 1: 設置條件篩選過期檔案

我們需要設定條件來篩選出要清理的檔案。Ex: 您可以選擇刪除 6 個月內沒有被修改過的檔案。

function getOldFiles() {
  // 設定6個月前的日期
  var sixMonthsAgo = new Date();
  sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 3);
  
  // 轉換日期格式為 YYYY-MM-DD,DriveApp 支援的查詢格式
  var formattedDate = Utilities.formatDate(sixMonthsAgo, Session.getScriptTimeZone(), 'yyyy-MM-dd');
  
  // 搜尋超過6個月未被修改的檔案
  var query = 'modifiedDate > "' + formattedDate + '" and trashed = false';
  var files = DriveApp.searchFiles(query);
  
  return files;
}
  • 上面程式碼會找出超過6個月沒有被修改且未被丟進垃圾桶的檔案。
  • searchFiles(query) 是搜尋使用者雲端硬碟符合所有搜尋條件的檔案集合
  • 其中 query 是可包含字串值的查詢字串,想看專屬 keyword 或更多詳細內容可看官方文件 搜尋查詢字詞和運算子

步驟 2: 生成報告並列出即將清理的檔案

在清理檔案之前,我們可以先生成報告,列出將要刪除的檔案,方便我們查看哪些檔案重不重要。

function generateCleanupReport() {
  var files = getOldFiles();
  var report = [];
  
  // 建立報告標題
  report.push(['File Name', 'Last Modified Date', 'File Size (MB)']);
  
  while (files.hasNext()) {
    var file = files.next();
    report.push([file.getName(), file.getLastUpdated(), (file.getSize() / (1024 * 1024)).toFixed(2)]);
  }
  
  // 將報告匯出到 Google Sheets
  var sheet = SpreadsheetApp.create('Drive Cleanup Report');
  sheet.getActiveSheet().getRange(1, 1, report.length, report[0].length).setValues(report);
  
  Logger.log('報告已生成. 請查看 Google Sheet url: '+sheet.getUrl());
}
  • 會將篩選後的檔案列表生成到 Google Sheets,並包含檔案名稱、最後修改日期以及檔案大小
    https://ithelp.ithome.com.tw/upload/images/20241007/20137680KecGZ80OLb.png

步驟 3: 批次刪除檔案

function cleanupOldFiles() {
  var files = getOldFiles();
  var deletedFiles = [];
  
  while (files.hasNext()) {
    var file = files.next();
    file.setTrashed(true);  // 將檔案移到垃圾桶
    deletedFiles.push(file.getName());
    Logger.log('Deleted file: ' + file.getName());
  }
  
  if (deletedFiles.length > 0) {
    Logger.log('Cleanup completed. Deleted ' + deletedFiles.length + ' files.');
  } else {
    Logger.log('No old files found for cleanup.');
  }
}
  • 這段程式碼會將符合條件(getOldFiles)的檔案移動到 Google Drive 的垃圾桶。

步驟 4: 設置觸發器自動清理 (Optional)

為了讓這個清理工具定期運行,您可以設置一個 time trigger 時間觸發器,例如每月運行一次。

  1. 點擊 Google Apps Script 編輯器中的「時鐘」圖標(觸發器 time trigger)
  2. 點擊「新增觸發器」,為 cleanupOldFiles() 函數設置一個 time trigger
  3. 設置 time trigger 的運行頻率,例如每個月運行一次定期清理過期的檔案

步驟 5: 通知用戶 (Optional)

在清理完檔案後,您還可以自動發送通知給管理者或團隊成員,告知哪些檔案已被清理。

function notifyCleanup() {
  var emailAddress = 'admin@example.com';  // 通知的電子郵件
  var subject = 'Google Drive Cleanup Report';
  var message = 'The Google Drive cleanup was completed successfully. Please check the attached report for details.';

  // 寄送郵件
  MailApp.sendEmail(emailAddress, subject, message);
  Logger.log('Notification sent to ' + emailAddress);
}

注意事項

Google App Script 一支程式的運行時間最多只有 6 分鐘,如果你雲端硬碟裡的檔案太多,可以要再另外想一個邏輯想辦法把已偵查過的檔案記錄起來,再往下一批檔案去搜尋~才不會永遠都只能找開頭這六分種的檔案們唷!

恭喜你又學會了如何用 GAS 做一個自動化雲端硬碟清理小工具,幫助我們清理雲端硬碟
再也不用一個一個資料夾點進去遍歷所有檔案囉!


上一篇
[Day 23] GAS - Google Drive 實戰演練 - 團隊檔案權限管理小幫手
下一篇
[Day 25] GAS - Calendar API:建立和管理日曆活動
系列文
30 天玩轉 GAS: 打造你的個人自動化助手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言