【发布时间】:2017-07-13 03:57:24
【问题描述】:
长话短说,我感染了 CryptoLocker 病毒。我的“正常”本地文件不是问题,因为我备份了这些文件。但我使用的是 Google Drive Sync 客户端,我所有的 Drive 文件都被加密了。我没有备份它们,因为我认为 Google 云端硬盘已保存并且我的数据存储在世界各地(我知道是我的错)。
现在我可以看到 Google Drive 提供了版本控制。这意味着我的旧上传仍在服务器上。我可以逐个文件恢复以前的版本,但要恢复几千个文件,祝你好运。 我联系了 Google G Suite 支持团队(我正在为我的业务使用 Google G Suite)并询问他们是否可以通过一次批量操作恢复最新版本。答案是“不,你必须逐个文件”。因此,我在互联网上查找脚本、工具等。
我在 Google 云端硬盘帮助论坛“https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0https://productforums.google.com/forum/#!topic/drive/p08UBFYgFs0”中找到了一个 Google Apps 脚本。
1) 我将“Google Apps 脚本”应用添加到我的驱动器中。
2) 我创建了一个新应用并通过了脚本:
function testSmallFolder() {
var smallFolder = DriveApp.getFolderById('FOLDER_ID_HERE');
var files = smallFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
var childFolders = smallFolder.getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
Logger.log(childFolder.getName());
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
}
function deleteRevisions(file)
{
var fileId = file.getId();
var revisions = Drive.Revisions.list(fileId);
if (revisions.items && revisions.items.length > 1)
{
for (var i = 0; i < revisions.items.length; i++)
{
var revision = revisions.items[i];
var date = new Date(revision.modifiedDate);
var startDate = new Date();
var endDate = new Date(revision.modifiedDate);
var fileName = Drive.Files.get(fileId);
if(revision.modifiedDate > "2017-02-16T10:00:00" && revision.modifiedDate < "2017-02-18T10:00:00" && revision.lastModifyingUserName == "ENTER_MODIFIED_USERNAME_HERE]]" && file.getName() !== "HELP_DECRYPT.URL" && file.getName() !== "HELP_DECRYPT.PNG" && file.getName() !== "HELP_DECRYPT.HTML")
{
Logger.log(' %s, Date: %s, File size (bytes): %s',file.getName(),
date.toLocaleString(),
revision.fileSize);
return Drive.Revisions.remove( fileId, revision.id);
}
}
} else
{
Logger.log('No revisions found.');
}
}function getSubFoldersAndDelete(parent)
{
parent = parent.getId();
var childFolders = DriveApp.getFolderById(parent).getFolders();
while(childFolders.hasNext())
{
var childFolder = childFolders.next();
var files = childFolder.getFiles();
while (files.hasNext())
{
file = files.next();
deleteRevisions(file);
}
getSubFoldersAndDelete(childFolder);
}
return;
}
3) 该脚本提供了 3 个函数“testSmallFolder”/“deleteRevisions”/“getSubFoldersAndDelete”。看起来功能“festSmallFolder”只能在某个文件夹上工作。第 2 行:FOLDER_ID_HERE
4) 我创建了一个文件夹并将我的文件移动到该文件夹中。之后我得到了文件夹 ID(URL)并将其添加到脚本中。
5) 在第 37 行,您可以添加修改的开始和结束日期。我还在同一行中调整了用户名。
6) 我保存了脚本并运行了“testSmallFolder”函数。
7) 我收到一条错误消息:“ReferenceError: "Drive" is not defined。 (第 27 行,文件“代码”)“。 第 27 行如下所示:“var revisions = Drive.Revisions.list(fileId);”。
我再次联系了 Google G Suite 支持人员,并就此错误向他们寻求帮助。他们的回答是“抱歉,我们不支持脚本。”
现在我在这里向你们寻求帮助。也许我们可以让这个脚本运行,这样我就可以恢复我的文件的最新工作版本。
非常感谢您提供的任何帮助。
【问题讨论】:
标签: google-apps-script google-drive-api virus