如何将 Rackspace Cloud File bucket 复制(下)到本地目录?或者更好的是,如何将本地目录更新为 RS bucket 的副本?
有很多用于上传或“rsync”的工具,但我正在寻找一种向另一个方向(从服务器向下)复制的工具。
答案1
您没有说清楚这是一个常规(系统)要求,还是一次性要求。
如果是后者,并且在某些情况下是前者,则应检查以下工具扩展驱动或者CyberDuck它允许您将机器上的文件夹同步到云文件容器上。
就后者(系统要求)而言,我不会以同样的方式推荐这些客户端工具 - 您最好使用 API 自己编写脚本。马特已经给出了很好的答案皮拉克斯- 如果需要的话,当然要检查其他语言中类似的 API 绑定 - 完整列表位于文档在这里。
答案2
您可以递归下载容器,即包括子文件夹及其内容,使用openstack/swift 工具在 Ubuntu 上,可以使用以下命令安装这些工具apt-get install python-swift
然后切换到要下载内容的目录并运行
swift -A https://auth.api.rackspacecloud.com/v1.0 -U <username> -K <api-key> download <container-name>
然后容器的内容<containername>
将被下载到当前目录。您需要提供<username>
用于登录云控制面板的 以及<api-key>
同一控制面板中帐户/帐户设置下的 。
答案3
德韦恩,
我不知道有任何现有的应用程序可以做到这一点,但是使用官方的 Rackspace Python SDK,pyrax 我们可以实现您的目标。pyrax 不包含执行此操作所需的完全构建的功能,但我花了几分钟通过扩展 pyrax 的默认功能将一些东西放在一起。
您可以在以下位置找到代码https://gist.github.com/5602713
在代码的最底部,您需要myusername
使用您的真实用户名、myapikey
您的真实 API 密钥、具有适当区域的 2 个位置(可能已经是 DFW)、some-container
真实容器名称以及/path/to/some/local/directory/
您希望它同步到的本地目录进行更新。
sync_container_to_folder
脚本底部调用的方法将删除任何远程不存在的本地文件,其工作方式与--delete
rsync 的参数类似。您可以添加delete=False
以阻止该功能,例如:
cf.sync_container_to_folder('some-container',
'/path/to/some/local/directory/',
delete=False)
的选项sync_container_to_folder
与 pyrax 内置函数的选项非常相似,sync_folder_to_container
如https://github.com/rackspace/pyrax/blob/master/docs/cloud_files.md#syncing-a-local-folder-with-a-container
我已经在一些小容器上进行了测试,没有测试过大容器,可以确认它似乎运行良好。但为了安全起见,您可能需要先使用测试容器和空的本地目录进行测试。
顺便说一句:您需要安装 pyrax 模块和 python-dateutil 模块才能使用此功能。这些不是标准的 python 模块。