我想弄清楚我是否可以在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"
会将所有文件上传到存储桶中。但是,我如何只抓取今天更改或生成的文件?有办法吗?
答案 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
。