有什么方法可以将大文件压缩为谷歌驱动器中较小的 .zip 或 .tar.gz 文件吗?我尝试了 google appscript 但它创建了 .zip 文件但没有压缩。如何做到这一点?
我发现有一种高效、快速、简单但间接的方法可以使用 Google Colaboratory 将大文件压缩/解压缩到 Google Drive 中。
例如, 假设您的 Google 云端硬盘中有一个名为 Dataset 的目录,大小为 5 GB,任务是将其压缩(压缩)为 Dataset.zip。
谷歌云端硬盘:
我的车程
数据集
步骤:
from google.colab import drive
drive.mount('/content/gdrive')
注意:现在在左侧(文件),您可以观察 gdrive 中的 My Drive 以及 My Drive 中的文件夹 Dataset。
压缩前的屏幕截图。
通过以下命令运行更改当前目录。
cd gdrive/My Drive/
使用以下命令将文件/文件夹压缩为Dataset到Dataset.zip。
!zip -r Dataset.zip Dataset/
压缩后截图:
注意:以上命令受 ubuntu 启发。因此,对于解压使用:
!unzip filename.zip -d ./filename
我已经尝试并使用我的驱动器中 10MB 大小的 pdf 文件测试了以下代码,它确实将其压缩为 9MB。我什至测试了一个云端硬盘文件(幻灯片),它确实压缩了它。
function fileZip(){
var files = DriveApp.getFilesByName('Google_Apps_Script_Second_Edition.pdf');
while (files.hasNext()) {
var file = files.next();
file = file.getBlob()}
DriveApp.createFile(Utilities.zip([file], 'tutorialFiles.zip'));
}
希望有帮助!
实际上比这更容易。文件已经是 Blob(任何具有 getBlob() 的内容都可以传递到任何需要 Blob 的函数)。所以代码看起来像这样:
var folder = DocsList.getFolder('path/to/folder');
folder.createFile(Utilities.zip(folder.getFiles(), 'newFiles.zip'));
此外,如果文件夹中有多个同名文件,它将不起作用...Google Drive 文件夹支持这一点,但 Zip 文件不支持。
要使其适用于具有相同名称的多个文件:
var folder = DocsList.getFolder('path/to/folder');
var names = {};
folder.createFile(Utilities.zip(folder.getFiles().map(function(f){
var n = f.getName();
while (names[n]) { n = '_' + n }
names[n] = true;
return f.getBlob().setName(n);
}), 'newFiles.zip'));
(来源)
使用 Google Drive 压缩服务:compress.my、multcloud 等
这是最好的方法(最快、最安全) - 结果不是一个新的 zip,而是压缩的相同文件。