亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索
首頁 > web前端 > js教程 > 正文

Google Drive重復(fù)文件智能清理:App Script實現(xiàn)保留最舊版本

聖光之護(hù)
發(fā)布: 2025-10-16 10:55:15
原創(chuàng)
558人瀏覽過

Google Drive重復(fù)文件智能清理:App Script實現(xiàn)保留最舊版本

本文詳細(xì)介紹了如何利用google apps script自動化清理google drive文件夾中的重復(fù)文件。通過修改app script代碼,腳本能夠識別文件名和大小均相同的重復(fù)文件,并智能地保留其中創(chuàng)建日期最早的版本,而將其他較新的重復(fù)文件移至回收站,從而有效管理存儲空間并保持文件歷史的完整性。

在日常使用Google Drive時,由于各種原因(如多次上傳、同步錯誤等),文件夾中常常會積累大量文件名和內(nèi)容重復(fù)的文件。這些重復(fù)文件不僅占用寶貴的存儲空間,還可能導(dǎo)致文件管理混亂。本教程旨在提供一個專業(yè)的Google Apps Script解決方案,幫助用戶自動識別并清理這些重復(fù)文件,同時確保保留創(chuàng)建日期最舊(即最早版本)的文件,以維護(hù)數(shù)據(jù)的歷史完整性。

理解原始方法的局限性

最初的嘗試通常會通過比較文件名和文件大小來識別重復(fù)文件。例如,一個常見的App Script實現(xiàn)可能會遍歷文件夾中的文件,并將已處理的文件名和大小存儲在一個列表中。如果遇到一個文件名和大小都與列表中現(xiàn)有文件匹配的新文件,就將其標(biāo)記為重復(fù)并刪除。

然而,這種方法存在一個關(guān)鍵局限:它通常會保留列表中“第一個”遇到的文件,而刪除后續(xù)遇到的同名同大小文件。這在實際應(yīng)用中意味著它傾向于保留“最新”的文件(因為迭代順序可能導(dǎo)致較新的文件先被處理或保留),而不是用戶期望的“最舊”文件。為了實現(xiàn)保留最舊文件的目標(biāo),我們需要引入文件創(chuàng)建日期的判斷邏輯。

優(yōu)化方案:基于創(chuàng)建日期的重復(fù)文件清理

為了精確地保留創(chuàng)建日期最舊的文件,我們需要對文件識別和處理邏輯進(jìn)行改進(jìn)。核心思路是:

  1. 收集文件信息: 遍歷目標(biāo)文件夾中的所有文件,不僅記錄文件名和大小,還要獲取其創(chuàng)建日期。
  2. 分組重復(fù)文件: 將文件名和大小都相同的文件歸為一組。
  3. 排序并篩選: 在每個重復(fù)文件組中,根據(jù)創(chuàng)建日期對文件進(jìn)行排序,識別出創(chuàng)建日期最早的文件。
  4. 執(zhí)行刪除: 將除了創(chuàng)建日期最早的文件之外的所有其他重復(fù)文件移至回收站。

App Script 實現(xiàn)

以下是經(jīng)過優(yōu)化的Google Apps Script代碼,它實現(xiàn)了上述邏輯:

降重鳥
降重鳥

要想效果好,就用降重鳥。AI改寫智能降低AIGC率和重復(fù)率。

降重鳥113
查看詳情 降重鳥
const FOLDER_ID = "INSERT_YOUR_FOLDER_ID_HERE"; // 替換為你的Google Drive文件夾ID

/**
 * 自動識別并刪除Google Drive文件夾中的重復(fù)文件,保留創(chuàng)建日期最舊的版本。
 */
function removeDuplicateFilesKeepingOldest() {
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const filesIterator = folder.getFiles();

  if (!filesIterator.hasNext()) {
    console.log("文件夾中沒有文件。");
    return;
  }

  // 使用一個對象來存儲文件列表,以 '文件名 + 文件大小' 作為鍵進(jìn)行分組
  // 每個鍵對應(yīng)的值是一個數(shù)組,包含該組中所有文件的詳細(xì)信息(文件對象、大小、創(chuàng)建日期)
  const groupedFiles = {};
  while (filesIterator.hasNext()) {
    const file = filesIterator.next();
    const name = file.getName();
    const size = file.getSize();
    const dateCreated = file.getDateCreated().getTime(); // 獲取創(chuàng)建日期的毫秒時間戳

    const key = name + size; // 使用文件名和大小作為唯一鍵

    // 如果該鍵已存在,則將當(dāng)前文件添加到現(xiàn)有數(shù)組;否則,創(chuàng)建一個新數(shù)組
    groupedFiles[key] = groupedFiles[key] 
      ? [...groupedFiles[key], { file, size, date: dateCreated }] 
      : [{ file, size, date: dateCreated }];
  }

  // 遍歷分組后的文件,識別并收集需要刪除的重復(fù)文件
  const filesToDelete = Object.values(groupedFiles).reduce((accumulator, fileGroup) => {
    // 如果文件組中只有一個文件,則它不是重復(fù)文件,無需處理
    if (fileGroup.length > 1) {
      // 對文件組按創(chuàng)建日期升序排序,最早的排在前面
      fileGroup.sort((a, b) => a.date - b.date);

      // 排除第一個(即最舊的)文件,將剩余的文件添加到待刪除列表中
      const [, ...duplicates] = fileGroup; // 使用解構(gòu)賦值跳過第一個元素
      accumulator = [...accumulator, ...duplicates.map(({ file }) => file)];
    }
    return accumulator;
  }, []);

  // 執(zhí)行刪除操作,將識別出的重復(fù)文件移至回收站
  if (filesToDelete.length > 0) {
    console.log(`找到并刪除 ${filesToDelete.length} 個重復(fù)文件。`);
    filesToDelete.forEach(file => file.setTrashed(true));
  } else {
    console.log("未找到重復(fù)文件。");
  }
}

/**
 * 可選:用于設(shè)置定時觸發(fā)器的函數(shù)。
 * 首先刪除所有現(xiàn)有觸發(fā)器,然后運(yùn)行一次文件清理。
 */
function setupDuplicateFileCleanerTrigger() {
  // 刪除所有現(xiàn)有項目觸發(fā)器
  ScriptApp.getProjectTriggers().forEach(trigger => ScriptApp.deleteTrigger(trigger));

  // 直接調(diào)用清理函數(shù)
  removeDuplicateFilesKeepingOldest();

  // 如果需要定時運(yùn)行,可以在這里創(chuàng)建一個新的定時觸發(fā)器
  // ScriptApp.newTrigger('removeDuplicateFilesKeepingOldest')
  //     .timeBased()
  //     .everyDays(1) // 每天運(yùn)行一次
  //     .atHour(2)   // 在凌晨2點(diǎn)運(yùn)行
  //     .create();
  // console.log("已設(shè)置重復(fù)文件清理觸發(fā)器。");
}
登錄后復(fù)制

代碼詳解

  1. FOLDER_ID 常量:

    • 您需要將 "INSERT_YOUR_FOLDER_ID_HERE" 替換為您的Google Drive目標(biāo)文件夾的實際ID。文件夾ID可以在瀏覽器中打開該文件夾時,從URL中獲取。
  2. removeDuplicateFilesKeepingOldest() 函數(shù):

    • 獲取文件夾和文件迭代器: DriveApp.getFolderById(FOLDER_ID) 獲取指定ID的文件夾對象,folder.getFiles() 獲取該文件夾中所有文件的迭代器。
    • groupedFiles 對象: 這是一個關(guān)鍵的數(shù)據(jù)結(jié)構(gòu)。它使用 name + size 作為鍵(key),將文件名和大小都相同的文件歸為一組。每個鍵的值是一個數(shù)組,數(shù)組中的每個元素都是一個包含 file 對象、size 和 date(創(chuàng)建日期的時間戳)的對象。
    • 文件信息收集循環(huán): while (filesIterator.hasNext()) 循環(huán)遍歷所有文件,提取文件名、大小和創(chuàng)建日期,并將其存儲到 groupedFiles 對象中。
    • filesToDelete 數(shù)組: Object.values(groupedFiles).reduce(...) 是核心邏輯。
      • Object.values(groupedFiles) 獲取 groupedFiles 對象中所有值(即每個文件組的數(shù)組)。
      • reduce() 方法遍歷這些文件組。
      • if (fileGroup.length > 1):只處理包含多個文件的組,因為只有一個文件的組不可能是重復(fù)的。
      • fileGroup.sort((a, b) => a.date - b.date):對當(dāng)前文件組進(jìn)行排序。由于 date 是時間戳,a.date - b.date 會按升序排列,使得創(chuàng)建日期最早的文件排在數(shù)組的第一個位置。
      • const [, ...duplicates] = fileGroup;:這是一個JavaScript的解構(gòu)賦值技巧。它將排序后的 fileGroup 數(shù)組的第一個元素(即最舊的文件)跳過,將剩余的所有元素(即所有較新的重復(fù)文件)收集到 duplicates 數(shù)組中。
      • accumulator = [...accumulator, ...duplicates.map(({ file }) => file)];:將 duplicates 數(shù)組中的文件對象提取出來,并添加到 filesToDelete 列表中。
    • 執(zhí)行刪除: filesToDelete.forEach(file => file.setTrashed(true)) 遍歷 filesToDelete 數(shù)組,將每個文件移至Google Drive的回收站。
  3. setupDuplicateFileCleanerTrigger() 函數(shù)(可選):

    • 此函數(shù)提供了一個設(shè)置定時觸發(fā)器的示例。它首先會刪除項目中所有現(xiàn)有的Apps Script觸發(fā)器,以避免沖突或重復(fù)執(zhí)行。
    • 然后直接調(diào)用 removeDuplicateFilesKeepingOldest() 執(zhí)行一次清理。
    • 注釋掉的部分展示了如何創(chuàng)建一個每天凌晨2點(diǎn)運(yùn)行一次的定時觸發(fā)器。如果您需要自動化此過程,可以取消注釋并調(diào)整時間。

使用方法

  1. 打開Google Apps Script:
    • 訪問 script.google.com。
    • 點(diǎn)擊“新建項目”或打開一個現(xiàn)有項目。
  2. 粘貼代碼:
    • 將上述完整的App Script代碼粘貼到代碼編輯器中,替換掉默認(rèn)的 Code.gs 內(nèi)容。
  3. 替換 FOLDER_ID:
    • 在代碼頂部,將 const FOLDER_ID = "INSERT_YOUR_FOLDER_ID_HERE"; 中的占位符替換為您的目標(biāo)Google Drive文件夾的實際ID。
  4. 保存項目:
    • 點(diǎn)擊保存圖標(biāo)(或 Ctrl + S / Cmd + S),為項目命名。
  5. 運(yùn)行腳本:
    • 在函數(shù)下拉菜單中選擇 removeDuplicateFilesKeepingOldest 函數(shù)。
    • 點(diǎn)擊“運(yùn)行”按鈕(播放圖標(biāo))。
    • 首次運(yùn)行時,您可能需要授權(quán)腳本訪問您的Google Drive。請按照提示進(jìn)行授權(quán)。
  6. 驗證結(jié)果:
    • 腳本運(yùn)行完成后,您可以檢查您的Google Drive文件夾和回收站,確認(rèn)重復(fù)文件已被正確處理。

注意事項

  • FOLDER_ID 準(zhǔn)確性: 確保您提供的文件夾ID是正確的。錯誤的ID將導(dǎo)致腳本無法找到目標(biāo)文件夾。
  • 權(quán)限授權(quán): 腳本需要您的授權(quán)才能訪問和修改您的Google Drive文件。請務(wù)必仔細(xì)閱讀并同意授權(quán)請求。
  • 文件識別: 本腳本通過文件名和文件大小來識別重復(fù)文件。這意味著如果兩個文件內(nèi)容不同但文件名和大小恰好相同,它們?nèi)詴灰暈橹貜?fù)。在大多數(shù)情況下,這足以識別真正的重復(fù)項。
  • 不可逆操作: setTrashed(true) 操作會將文件移動到Google Drive的回收站,而不是永久刪除。您仍然可以在回收站中恢復(fù)文件。如果您需要永久刪除,可以使用 file.setTrashed(true).setDeleted(true),但請務(wù)必謹(jǐn)慎操作,因為永久刪除是不可逆的。
  • 大型文件夾: 如果目標(biāo)文件夾包含大量文件(數(shù)萬個以上),腳本執(zhí)行可能會耗時較長,甚至可能遇到Google Apps Script的執(zhí)行時間限制(通常為6分鐘)。對于超大型文件夾,可能需要考慮更復(fù)雜的批處理或分頁處理邏輯。
  • 錯誤處理: 提供的腳本是基礎(chǔ)版本。在生產(chǎn)環(huán)境中,您可能需要添加更健壯的錯誤處理機(jī)制,例如 try-catch 塊,以捕獲并記錄潛在的API調(diào)用錯誤。

總結(jié)

通過本教程提供的App Script解決方案,您可以有效地自動化Google Drive中重復(fù)文件的清理工作,并確保始終保留創(chuàng)建日期最舊的版本。這不僅有助于優(yōu)化存儲空間,還能提高文件管理的效率和準(zhǔn)確性,使您的Google Drive保持整潔有序。記住,在執(zhí)行任何涉及文件刪除的操作前,最好先進(jìn)行備份或在測試文件夾中進(jìn)行驗證。

以上就是Google Drive重復(fù)文件智能清理:App Script實現(xiàn)保留最舊版本的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件

每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號