Google云端存储上传文件今天已修改

时间:2013-06-06 19:15:22

标签: google-cloud-storage

我想弄清楚我是否可以在Windows平台上使用gsutil的cp命令将文件上传到Google云端存储。我的本地计算机上有6个文件夹,每天都会添加新的pdf文档。每个文件夹包含大约2,500个文件。目前,所有文件都位于各自文件夹中的Google存储中。现在我主要使用Google Cloud Storage Manager上传所有新文件。有没有办法创建批处理文件并安排每晚自动运行它,这样它只抓取今天扫描过的文件并将其上传到谷歌存储?

我试过这种格式:

python c:\gsutil\gsutil cp "E:\PIECE POs\64954.pdf" "gs://dompro/piece pos" 

它完全上传了文件。

此命令

python c:\gsutil\gsutil cp "E:\PIECE POs\*.pdf" "gs://dompro/piece pos" 

会将所有文件上传到存储桶中。但是,我如何只抓取今天更改或生成的文件?有办法吗?

2 个答案:

答案 0 :(得分:1)

一种解决方案是在gsutil cp命令中使用-n parameter

python c:\gsutil\gsutil cp -n "E:\PIECE POs\*" "gs://dompro/piece pos/"

这将跳过服务器上已存在的任何对象。您可能还想查看使用gsutil的-m flag并查看是否可以加快您的流程:

python c:\gsutil\gsutil -m cp -n "E:\PIECE POs\*" "gs://dompro/piece pos/"

答案 1 :(得分:1)

由于你可以使用Python,你可以编写一个小的Python脚本来查找目录中每个文件的ctime(创建时间)或mtime(修改时间),看看是否date是今天,如果是的话就上传。您可以在this question中看到一个示例,可以按如下方式进行调整:

import datetime
import os

local_path_to_storage_bucket = [
    ('<local-path-1>', 'gs://bucket1'),
    ('<local-path-2>', 'gs://bucket2'),
    # ... add more here as needed
]

today = datetime.date.today()
for local_path, storage_bucket in local_path_to_storage_bucket:
    for filename in os.listdir(local_path):
        ctime = datetime.date.fromtimestamp(os.path.getctime(filename))
        mtime = datetime.date.fromtimestamp(os.path.getmtime(filename))
        if today in (ctime, mtime):
            # Using the 'subprocess' library would be better, but this is
            # simpler to illustrate the example.
            os.system('gsutil cp "%s" "%s"' % (filename, storage_bucket))

或者,请考虑直接使用Google Cloud Store Python API,而不是炮轰gsutil