丢弃谷歌驱动器的文件还原到目标文件夹(Restore trashed google drive fi

2019-07-18 17:02发布

我需要在我的谷歌驱动的垃圾目前移动所有文件到特定的文件夹,或者,如果不能做到,他们恢复到原来的位置。 一些乱七八糟的事情,我有在垃圾桶有价值的文件,有6演出当中,所以我宁愿他们在本地移动到一个单独的目录,备份或同步,后来看到这些文件。

这是剧本我到目前为止有:

function moveFilesFromTrash() {
  var pageSize = 200;
  var files = null;
  var token = null;

  var cestisti = DocsList.getFolder('cestisti');

  do {
    var result = DocsList.getAllFilesForPaging(pageSize, token);
    files = result.getFiles();
    token = result.getToken();
    for (var i = 0; i < files.length; i++) {
      if (files[i].isTrashed == true) {
        Logger.log(files[i].getName());
//      files[i].setTrashed(false)
        files[i].addToFolder(cestisti);
    }
  } while (files.length == pageSize);
}

这件事是它是行不通的。

代码页的文件,通过项目的一部分工作,我是从我的其他工作的脚本。 我只是不知道,如果它解析垃圾文件夹或标签。 我不知道是否setTrashed()addtofolder()的作品-我不知道。 现在,前者被注释掉了,因为我宁愿直接复制恢复他们的项目,但如果这是不可能的,我可以恢复。

Answer 1:

这个答案已经由于已超出DocsList的折旧更新,现在使用DriveApp方法贯穿始终。

您必须取消回收站的文件,然后才能移动它,但这样做将完成你以后。 这里的算法:

  1. 获取文件(或文件ID)的列表中的所有文件丢弃
  2. 对于每个文件,
    • 取消删除/取消垃圾文件
    • 移动文件到目标文件夹(详细:删除原始文件夹文件,添加到目标文件夹恢复)

这个答案提供了脚本来完成这个的片段; 完整的脚本可作为谷歌表格插件的要点 ,完整的菜单和UI元素。

收回所有丢弃的文件

该功能使用DriveApp.search()来获取所有丢弃的文件列表,然后将它们恢复到一个指定的文件夹, rescueFldr ,这将如果尚未有创建。

/**
 * Untrash then move all trashed files to rescue folder.
 * From: http://stackoverflow.com/a/14541247/1677912
 * 
 * @returns {Number}   Count of Rescued files.
 */
function rescueAllFiles() {
  // Find or create target folder
  var rescueFldrIterator = DriveApp.getFoldersByName(rescueFldrName);
  var rescueFldr = rescueFldrIterator.hasNext() ? rescueFldrIterator.next() : DriveApp.createFolder(rescueFldrName);

  // Get file iterator with all trashed files
  var trashed = DriveApp.searchFiles('trashed=true');

  var count = 0;
  while (trashed.hasNext()) {
    var file = trashed.next();
    // Untrash the file
    if (rescueFile( file, rescueFldr )) count++;
  }
  return(count);
};

恢复特定文件丢弃

如果你想有过将要恢复的文件更多的控制,你不能简单地修改上面使用的搜索参数,另一种可能是列出一个表格文件的ID,并有一个脚本使用,作为其输入。

装满丢弃文件的电子表格

/**
 * Get array of files in user's Google Drive trash, and write
 * into currently active sheet.
 * From: http://stackoverflow.com/a/14541247/1677912
 * 
 * @returns   {Object[]}   Array of DriveApp file objects
 */
function getTrashedFiles() {
  var trashedSearch = DriveApp.searchFiles('trashed=true');
  var files = [];
  files.push(["ID","File Name","Type","URL"]);
  while (trashedSearch.hasNext()) {
    var file = trashedSearch.next();
    files.push([file.getId(),file.getName(),docTypeToText_(file.getMimeType()),file.getUrl()]);
  }
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.clear();
  sheet.getRange(1, 1, files.length, files[0].length)
       .setValues(files);
  return files;
}

手册文件标识集合

(替代自动检索,仅供参考。)因为你只是这样做会一次,不过,让我们欺骗。 在文件列表页面的底部,使用API​​浏览器检索您的所有被删除的文件的ID!

输出显示就像你收到它,如果你调用了从脚本API。

剪切和粘贴输出到一个文本文件,并剥离下来,只是全部文件ID。 (我这样做,或者使用gvim,它只需几个命令。)结果保存为CSV文件,并将其拖到驱动器作为电子表格。 这里是一个什么样子。 (做包括报头线;所述脚本假定有一个。)

流程丢弃文件

现在的丢弃文件列表是在电子表格中,脚本恢复和举动很容易。

/**
 * Untrash then move files listed in spreadsheet to rescue folder.
 * From: http://stackoverflow.com/a/14541247/1677912
 * 
 * @returns {Number}   Count of Rescued files.
 */
function rescueListedFiles() {
  var fileList = SpreadsheetApp.getActiveSheet()
                               .getDataRange().getValues()
                               .splice(1);  // Skip header line
  // Find or create target folder
  var rescueFldrIterator = DriveApp.getFoldersByName(rescueFldrName);
  var rescueFldr = rescueFldrIterator.hasNext() ? rescueFldrIterator.next() : DriveApp.createFolder(rescueFldrName);

  var count = 0;  
  for (var i=0; i<fileList.length; i++) {
    var fileId = fileList[i][0];
    var file = DriveApp.getFileById(fileId);
    // Untrash the file
    if (rescueFile( file, rescueFldr )) count++;
  }
  return( count );
};


Answer 2:

尝试,如果(文件[I] .isTrashed()==真)

我建议你把一些诊断(Logger.log)来缩小问题



Answer 3:

请记住,文件不是在文件夹中。 文件有所谓的文件夹,并可以有多个文件夹(标签)的标签。 即使是“丢弃”的标签。 设置只是垃圾创建一个丢弃的标签,它覆盖其他标签(文件夹)。 下面的代码不动任何东西。 它只是重置标签(文件夹)编辑:已删除不是一个标签,而是一个条件:一切持有

    for (var i = 0; i < files.length; i++) {
      if (files[i].isTrashed()) {  // don't forget ()
        Logger.log(files[i].getName());
        var folders = files[i].getParents();
        // remove existing folders(labels)
        for(var f = 0; f < folders.length; f++ ) {
          files[i].removeFromFolder( folders[f] );
        };
        // remove trashed label
        files[i].setTrashed(false);
        // add cestisti label(add to cestisti folder)
        files[i].addToFolder(cestisti);
       }
    }


文章来源: Restore trashed google drive files to a target folder