将多个文件夹压缩为 1 个 zip - Google 云端硬盘脚本

2023-12-19

我想为 Google Drive 制作一个脚本。我想每周备份我的文件夹并将它们存储在 Google 云端硬盘中的另一个文件夹中。 关于每周触发,我已经可以了,但是我遇到了问题,因为我找不到压缩整个文件夹的方法。 我要压缩的文件夹有多个子文件夹和文档。我尝试在每个文件夹中进行搜索并制作文件的 zip 文件,但我发现这很复杂,并且最终为一个文件夹提供了许多 zip 文件。到目前为止我的代码是这样的:

function zipFolder(pathFolder, filename, destinyPath) {
  var date = Utilities.formatDate(new Date(), "GMT", "ddMMyyyy");
  var destiny = DocsList.getFolder(destinyPath);
  var folder = DriveApp.getFolderById(DocsList.getFolder(pathFolder).getId());
  var zip = Utilities.zip(folder, filename+date+'.zip');
  destiny.createFile(zip);
}

我收到错误消息,它无法压缩文件夹,它必须是一个 blob。我怎样才能解决这个问题?

Thanks!


您可以使用此代码:

function zipFolder(pathFolder, filename, destinyPath) {
  var date = Utilities.formatDate(new Date(), "GMT", "ddMMyyyy");
  var destiny = DocsList.getFolder(destinyPath);
  var folder = DriveApp.getFolderById(DocsList.getFolder(pathFolder).getId());
  var zip = Utilities.zip(getBlobsPath(folder, ''), filename+date+'.zip');
  destiny.createFile(zip);
}

function getBlobsPath(reFolder, path) {
  var blobs = [];
  var files = reFolder.getFiles();
  while (files.hasNext()) {
    var file = files.next().getBlob();
    file.setName(path+file.getName());
    blobs.push(file);
  }
  var folders = reFolder.getFolders();
  while (folders.hasNext()) {
    var folder = folders.next();
    var fPath = path+folder.getName()+'/';
    blobs.push(Utilities.newBlob([]).setName(fPath)); //comment/uncomment this line to skip/include empty folders
    blobs = blobs.concat(getBlobsPath(folder, fPath));
  }
  return blobs;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将多个文件夹压缩为 1 个 zip - Google 云端硬盘脚本 的相关文章

随机推荐

  • 聚合管道和索引

    From http docs mongodb org manual core indexes multikey indexes http docs mongodb org manual core indexes multikey index
  • 如何在 Java 中从原始 byte[] 创建 BMP 文件

    我有一个 C 应用程序 它与相机通信并获取原始图像数据 然后我有一个 C 中的 Byte 我想用 JNI 将其发送到 Java 但是 我需要将原始 Byte 转换为真实的文件格式 bmp 是我的第一选择 如果我使用 BITMAPFILEIN
  • 从R中的循环返回单独的txt文件

    我想返回循环中每次迭代的结果 并将其写入单独的文本文件中 但由于某种原因 它似乎不起作用 我的代码是 for i in length traject player lt subset traject i subset dt 1 test l
  • 哪种排序方法最适合并行处理?

    我现在正在查看我以前的学校作业 想找到问题的答案 哪种排序方法最适合并行处理 冒泡排序 快速排序 归并排序 选择排序 我想快速排序 或合并排序 就是答案 我对么 与合并排序一样 快速排序由于其分而治之的性质也可以轻松并行化 单独的就地分区操
  • 通过 List 发布多个文件

    我只想通过模型将多个文件发布到控制器 class myModel public List
  • Android MediaPlayer 未从prepareAsync 返回

    我在使用特定 URI 启动 MediaPlayer 的 Logcat 中得到以下信息 通常 每个 Uri 无论好坏 都会播放或返回错误 除了这个特定的 Uri I MPS PrepAsync started V MediaPlayer me
  • 如何在 F# 中编写函子在 OCaml 中执行的操作的代码?

    我有很多用 OCaml 编写的程序 其中一些使用函子 现在 我正在考虑用 F 编写和重写部分代码 以受益于 OCaml 不具备的一些优点 我担心的一件事是在 F 中编写函子在 OCaml 中执行的操作的代码 例如 我们如何模仿这个例子来自
  • 在 PHP 开关中使用 strstr

    我只是想不出代码 我有太多 if 语句 我想将其更改为 switch 语句 但我找不到逻辑 目前我有 if strstr var texttosearch echo string contains texttosearch if strst
  • org.h2.jdbc.JdbcSQLException:未找到列“ID”

    我的代码中有以下 DDL CREATE TABLE IF NOT EXISTS SOMETABLE id BIGINT AUTO INCREMENT NOT NULL FOREIGN KEY id REFERENCES OTHERTABLE
  • Javascript (MVC) 从数据库加载图像(字节数组)

    Stack 上有很多这个问题的答案 但没有一个对我有用 我需要通过对控制器的 ajax 调用检索字节数组 在 javascript 中设置图像标签的 src 属性 我必须在客户端执行此操作 因为我正在动态构建一些 html 在下面的简单示例
  • 如何在 ASP.Net 中转储响应标头

    我正在使用 VSTS 2008 C Net 3 5 来开发 ASP Net 我想转储特定 aspx 文件返回给客户端的所有响应标头 有什么想法可以轻松做到这一点吗 我知道如何使用 Response Headers 集合 但我的困惑是在哪里枚
  • 如何告诉屏幕阅读器链接已禁用?

    我有一个页面n部分 这些部分是隐藏的 只能通过单击各自的链接来显示 页面加载时 只有第一个链接处于活动状态 其余 n 1 个链接处于活动状态href 基于某种逻辑 其他链接被单独激活 如何让屏幕阅读器理解该链接是disabled or 停用
  • Handsontable:隐藏一些列而不更改数据数组/对象

    我有一个数据要在网格中显示 我正在使用 Handsontable 来显示数据 每个第三列都计算为前两列的差值 例如 第三列渲染为第一列和第二列的总和 这是由自定义渲染器通过取总和来完成的i 1 and i 2列 这是我的 差异 列的自定义渲
  • React - Axios 调用发出太多请求

    我通过制作游戏项目来学习 React 和 Redux 我想通过API获取数据 属性 但它导致太多请求 我猜它可以与直接在功能性反应组件中放置 axios 调用有关 但我不知道如何修复它 function Attributes attribu
  • 如何在 Android 中下载并保存图像

    如何在 Android 中从给定的 URL 下载并保存图像 编辑截至 2015 年 12 月 30 日 图像下载终极指南 最后一次重大更新 2016 年 3 月 31 日 TL DR 又名 别再说了 给我代码吧 跳到这篇文章的底部 复制Ba
  • 如何将前导零的数字转换为字符串并保留原​​始数字

    我正在尝试将以 0 开头的数字转换为字符串 例如 变量 x 01127160037 but when I convert it to string it become 157081631 我期望得到字符串中 01127160037 的实际结
  • 页面刷新后QWebEngineView问题

    当我切换用户代理时问题就解决了 但不知怎的 当我刷新页面或从whatsapp注销时它又回来了 我已经实现了一个用户代理打印机来检查用户代理是否重置回来 但事实并非如此 如何我能解决这个问题吗 code import sys from PyS
  • Java - 检查 JTextField 是否为空

    所以我知道这是一个很受欢迎的问题并且已经找到了解决方案 但当我尝试这样做时 它无法正常工作 我的 JTextField 为空并且按钮未启用 当我在文本字段中写入内容时 按钮不会启用 所以我的程序应该每秒检查该字段是否为空 一旦有人在文本字段
  • ORA-06550 和 PLS-00103

    HI 我正在使用 UNIX 操作系统并在 oracle 上工作 我收到以下错误消息 E ORA 06550 line 1 column 8 PLS 00103 Encountered the symbol when expecting on
  • 将多个文件夹压缩为 1 个 zip - Google 云端硬盘脚本

    我想为 Google Drive 制作一个脚本 我想每周备份我的文件夹并将它们存储在 Google 云端硬盘中的另一个文件夹中 关于每周触发 我已经可以了 但是我遇到了问题 因为我找不到压缩整个文件夹的方法 我要压缩的文件夹有多个子文件夹和