前言:Google 帳戶儲存空間為何快速爆滿?

Google 帳戶免費提供 15 GB 的儲存空間,由 Gmail、Google 雲端硬碟(Drive)與 Google 相簿共用。許多用戶在不知情的狀況下,手機自動備份、他人分享的檔案、年積月累的舊郵件,都會在無聲無息間消耗你的容量。本文將整理三大 Google 服務的批量刪除方法,並附上實測可用的 Apps Script 腳本。


一、大量刪除 Google 雲端硬碟舊檔案

方法一:使用搜尋列手動篩選刪除

  1. 前往 drive.google.com
  2. 在搜尋列輸入日期條件,例如 before:2026/06/19(7 天前)
  3. Ctrl + A(Mac 為 Cmd + A)全選,或點擊左上角的勾選框
  4. 右鍵 → 移至垃圾桶

⚠️ 注意:Google Drive 介面一次只載入 50–100 個檔案,若檔案數量龐大,需要反覆向下捲動再選取,效率很低,建議改用腳本。

方法二:Google Apps Script 自動批量刪除(推薦)

前往 script.google.com,建立新專案,貼入以下程式碼:

function deleteOldFiles() {
  var daysAgo = 7; // 可自行調整天數
  var date = new Date();
  date.setDate(date.getDate() - daysAgo);

  var query = "createdDate < '" + Utilities.formatDate(date, Session.getScriptTimeZone(), "yyyy-MM-dd") + "'";
  var files = DriveApp.searchFiles(query);

  var count = 0;
  while (files.hasNext()) {
    files.next().setTrashed(true);
    count++;
  }

  console.log('Total files moved to trash: ' + count);
}

常見錯誤排除:

  • Invalid argument: q:Drive 搜尋不支援 ISO 日期格式,請使用 yyyy-MM-dd 格式,並用單引號包住日期字串。
  • Access denied: DriveApp:需重新授權。點選「執行」後選擇「審查權限」→「允許」Drive 存取。若問題持續,進入專案設定,手動在 appsscript.json 加入 OAuth 範圍:
{
  "oauthScopes": [
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/drive.file"
  ]
}

Drive 搜尋語法速查表

需求 搜尋語法
建立日期早於某日 createdDate < '2026-06-19'
修改日期早於某日 modifiedDate < '2026-06-19'
特定資料夾內 'FOLDER_ID' in parents
特定檔案類型 mimeType = 'application/pdf'
名稱包含關鍵字 title contains 'Report'

二、刪除 Google Drive 中的空資料夾

為什麼要清理空資料夾?

長期使用 Drive 後,大量移動或刪除檔案會留下空殼資料夾,不僅視覺雜亂,也增加管理成本。實測案例中,1,506 個資料夾裡有 642 個是空的,比例高達 42%。

步驟一:啟用進階 Drive API

  1. 在 Apps Script 專案左側點擊「服務」旁的 +
  2. 選擇 Google Drive API → 新增

步驟二:預覽將刪除的空資料夾(建議先執行)

function previewEmptyFolders() {
  var startTime = new Date();
  var emptyFolders = [];
  var checkedCount = 0;
  var pageToken = null;

  do {
    var response = Drive.Files.list({
      q: "mimeType = 'application/vnd.google-apps.folder' and trashed = false",
      pageSize: 1000,
      pageToken: pageToken,
      fields: "nextPageToken, files(id, name)"
    });

    var folders = response.files || [];

    for (var i = 0; i < folders.length; i++) {
      checkedCount++;
      var folder = folders[i];

      var children = Drive.Files.list({
        q: "'" + folder.id + "' in parents and trashed = false",
        pageSize: 1,
        fields: "files(id)"
      });

      if (!children.files || children.files.length === 0) {
        emptyFolders.push({ name: folder.name, id: folder.id });
      }

      if (checkedCount % 500 === 0) {
        var elapsed = ((new Date() - startTime) / 1000).toFixed(1);
        console.log('Checked ' + checkedCount + ' folders... (' + elapsed + 's)');
      }
    }

    pageToken = response.nextPageToken;
  } while (pageToken);

  console.log('TOTAL CHECKED: ' + checkedCount);
  console.log('EMPTY FOLDERS: ' + emptyFolders.length);
  for (var i = 0; i < Math.min(emptyFolders.length, 50); i++) {
    console.log((i + 1) + '. "' + emptyFolders[i].name + '"');
  }
}

步驟三:執行刪除(含權限錯誤保護)

function removeEmptyFolders() {
  var startTime = new Date();
  var emptyCount = 0;
  var skippedCount = 0;
  var pageToken = null;
  var myEmail = Session.getEffectiveUser().getEmail();

  do {
    var response = Drive.Files.list({
      q: "mimeType = 'application/vnd.google-apps.folder' and trashed = false",
      pageSize: 1000,
      pageToken: pageToken,
      fields: "nextPageToken, files(id, name, owners)"
    });

    var folders = response.files || [];

    for (var i = 0; i < folders.length; i++) {
      var folder = folders[i];

      // 只刪除自己擁有的資料夾
      var isOwner = folder.owners &&
        folder.owners.some(function(o) { return o.emailAddress === myEmail; });

      if (!isOwner) { skippedCount++; continue; }

      var children = Drive.Files.list({
        q: "'" + folder.id + "' in parents and trashed = false",
        pageSize: 1,
        fields: "files(id)"
      });

      if (!children.files || children.files.length === 0) {
        try {
          Drive.Files.update({ trashed: true }, folder.id);
          emptyCount++;
        } catch (e) {
          console.log('Skipped "' + folder.name + '": ' + e.message);
          skippedCount++;
        }
      }
    }

    pageToken = response.nextPageToken;
  } while (pageToken);

  console.log('Deleted: ' + emptyCount + ' | Skipped (no permission): ' + skippedCount);
}

⚠️ 注意:遇到「insufficient permissions」錯誤,代表該資料夾由他人擁有或為唯讀共享。上方腳本已加入擁有者判斷與 try/catch,會自動略過無法刪除的資料夾。


三、大量刪除 Gmail 舊郵件

方法一:搜尋列 + 全選刪除

  1. 在搜尋列輸入篩選條件(見下表)
  2. 點選左上角勾選框(選取當頁約 50 封)
  3. 點擊藍色連結「選取此搜尋中的所有 X 封郵件」(這步驟非常關鍵!)
  4. 點擊垃圾桶圖示刪除

Gmail 搜尋語法速查表

需求 搜尋語法
7 天前的郵件 older_than:7d
1 個月前 older_than:1m
1 年前 older_than:1y
特定日期前 before:2026/06/19
含附件 has:attachment
大於 10MB larger:10M
垃圾信件匣 in:spam

方法二:Apps Script 批量刪除(處理 500 封以上)

Gmail API 每次最多回傳 500 封,以下腳本會自動循環處理直到清空:

function deleteAllOldEmails() {
  var batchSize = 500;
  var totalDeleted = 0;

  while (true) {
    var threads = GmailApp.search('older_than:7d', 0, batchSize);

    if (threads.length === 0) break;

    for (var i = 0; i < threads.length; i++) {
      threads[i].moveToTrash();
    }

    totalDeleted += threads.length;
    console.log('Deleted batch: ' + threads.length + ' | Total so far: ' + totalDeleted);

    Utilities.sleep(1000); // 避免觸發速率限制
  }

  console.log('GRAND TOTAL DELETED: ' + totalDeleted);
}

執行前的小技巧:先手動清空「垃圾郵件」與「已刪除郵件」,可減少腳本需處理的數量。


四、大量刪除 Google 相簿

為什麼相簿會莫名佔用空間?

Google 相簿備份功能預設為開啟狀態,只要安裝了 Google 相簿 App,手機相機膠卷就會自動上傳至雲端,全部計入 15 GB 免費配額。

手動刪除(適合少量)

  1. 前往 photos.google.com
  2. 點選第一張相片 → 按住 Shift → 點選最後一張(範圍選取)
  3. 點擊垃圾桶圖示

⚠️ 注意:Google 相簿沒有真正的「全選」功能,需要向下捲動載入後再分批選取。

關閉自動備份(防止繼續上傳)

  • Android / iPhone:開啟 Google 相簿 App → 個人資料 → 相片設定 → 備份 → 關閉「備份與同步」

刪除雲端、保留手機本地照片(正確操作順序)

  1. 關閉備份功能(上方步驟)
  2. 前往 photos.google.com
  3. 刪除不需要的相片

⚠️ 若未先關閉備份就在手機刪除,照片也會同步從雲端消失。

刪除提示說明

當 Google 相簿顯示「將從您的 Google 帳戶、已開啟備份的裝置及您在 Google 相簿中分享的位置移除」,這代表:

  • 從雲端刪除 ✓
  • 從已開啟備份的手機/平板刪除 ✓
  • 從共享相簿中移除 ✓
  • 刪除後相片進入垃圾桶,保留 60 天(與 Gmail 的 30 天不同)

重要注意事項彙整

服務 垃圾桶保留期 注意事項
Google Drive 30 天 刪除共享資料夾可能影響他人
Gmail 30 天 1 個 Thread 可能含多封郵件
Google 相簿 60 天 垃圾桶清空前仍佔用儲存空間

確認儲存空間使用狀況

前往 one.google.com/storage,可以看到 Gmail、Drive、相簿各自佔用多少空間,作為清理前後的對比依據。