目标:
利用两种解决方案之间相同的文件夹结构,确定哪些文件在我的本地硬盘上,而不在Google云端硬盘上(在线,非同步)。
详细信息:
我使用Google云端硬盘作为硬盘备份,目前已经上传了超过1TB的数据。文件存储在云中后,有时会删除硬盘上的文件以释放空间。我的Google云端硬盘上的文件总数超过了我的硬盘空间,因此我没有将GDrive文件夹同步到硬盘上。
我最近意识到并非硬盘上的所有文件也都在Google云端硬盘上,因此我想添加丢失的文件。不幸的是,我没有驱动器上缺少的文件的详尽列表。
选择的方法:
(很高兴考虑其他任何方法,如果您认为更简单/更快!)
使用Python脚本比较GDrive和HDD上各个文件夹的内容。幸运的是,文件夹的结构是相同的,即在Google云端硬盘上,我可能有一个Fotos / 2019 / January文件夹,而在我的硬盘上也有相同的结构。
对于本地副本,使用以下代码没有任何问题:
import os
hd_directories = []
for path, dirs, files in os.walk(r'D:'):
for f in files:
value = path+'\\'+f
hd_directories.append(value)
这将产生以下输出:
D:\Fotos\2019\January\1.jpg
D:\Fotos\2019\January\2.jpg
D:\Fotos\2019\January\3.jpg
我尝试通过其API为Google云端硬盘获取类似的输出,但迄今为止却惨败。我要做的最好的事情是利用此脚本的稍作修改的版本(https://github.com/beatleuk/gdfl)将文件夹结构作为嵌套的HTML列表获取,但随后却难以将此嵌套的“ ul-li”列表压平到正确的文件夹中结构体。
编辑:我从运行此代码得到的示例输出是一个HTML文件,其结构如下:
<ul>
<li> D
<ul>
<li> Fotos
<ul>
<li> 2019
<ul>
<li> 1.jpg
<li> 2.jpg
<li> 3.jpg
</li>
</ul>
</li>
</ul>
</li>
</ul>
我花了将近一个星期的时间来尝试解决这个问题,但到目前为止却没有成功...是否有人知道如何最好地获得GDrive上所有文件的完整列表,包括它们的文件夹路径 ?
答案 0 :(得分:0)
在执行file.list或file.get时,Google驱动器实际上并没有真正获取文件的完整路径的地方。
找出文件完整路径的唯一方法是从根目录开始,然后循环遍历所有文件,依次获取每个目录中的所有文件。这是一个漫长的过程。通常我会缓冲这些文件并在本地对其进行整理。
确实没有更好的方法可以做到这一点。下载每个文件时,必须像循环一样建立其目录结构。
我有一个执行此操作的示例,但是在C#中这样做可能对您没有太大帮助。