title: others-七牛云图床备份
categories: Others
tags: [七牛云, 备份, 图床]
date: 2019-04-30 17:12:45
comments: false

others-七牛云图床备份, 备份一下求个心安, 万一真的某天挂了还可以丢到其他云上.
支持增量下载, 本地已有的文件就不再下载.


官网地址: https://developer.qiniu.com/kodo/kb/3744/batch-download-and-backup-space

这里用的是 python3 脚本. 本来想用 go 写的, 毕竟并发好, 量大下载速度爽, 机子上没有环境懒得去搭了, 直接上了 python.

先安装 七牛云 的 py库

# pip3 install qiniu

批量下载脚本. 简单粗暴上代码.

有时执行时 bucket.list 接口会返回 None, 是七牛云的问题. 下载完对比一下文件总量确保完全下载, 对不上的话可以执行多几次脚本, 反正是增量的.

# -*- coding: utf-8 -*-
from qiniu import Auth
from qiniu import BucketManager
import requests
import osaccess_key = "aaa"
secret_key = "bbb"q = Auth(access_key, secret_key)
bucket = BucketManager(q)# 前缀
prefix = None
# 列举条目
limit = 1000 # 一次列举最多 1000 个
# 列举出除'/'的所有文件以及以'/'为分隔的所有前缀
delimiter = Nonelocal_save_path = "H:/Picture/qiniu_pic"local_map = {}bucket_map = {"hexo-blog" : "http://domain01.com",'mywiki' : 'http://domain02.com','mywiki-2' : 'http://domain03.com','mywiki-3' : 'http://domain04.com',
}def download_bucket(bucketName, bucketDomain, marker, cnt):save_dir = os.path.join(local_save_path, bucketName)if not os.path.exists(save_dir):os.makedirs(save_dir)if cnt == 0:print("------------ start download bucket:[%s], domain:[%s]"% (bucketName, bucketDomain))ret, eof, info = bucket.list(bucketName, prefix, marker, limit, delimiter)if ret == None:print("--- Error, ret is None!", ret)returnfor i in ret.get("items"):# print('key:', i['key'])webfile = i["key"]# 本地已有的文件就跳过if (local_map.get(bucketName) != Noneand local_map.get(bucketName).get(webfile) != None):continuebase_url = "%s/%s" % (bucketDomain, webfile)print("--- downloading: %s" % base_url)# 如果空间有时间戳防盗链或是私有空间,可以调用该方法生成私有链接private_url = q.private_download_url(base_url, expires=100)# print(private_url)r = requests.get(private_url)if r.content:cnt += 1file = open(os.path.join(save_dir, webfile), "wb")file.write(r.content)file.flush()file.close()retMarker = ret.get("marker")if retMarker != None: # 如果没有列举完, 这个字段是个字符串标记, 用于下次的列举download_bucket(bucketName, bucketDomain, retMarker, cnt)else:print("------------ over, bucket:[%s], domain:[%s], count:[%d]"% (bucketName, bucketDomain, cnt))print()# 收集本地已有的图片, 避免重复下载
def collect_local_exist(bucketName):save_dir = os.path.join(local_save_path, bucketName)if not os.path.exists(save_dir):returnlocal_map[bucketName] = {}for root, dirs, files in os.walk(save_dir):for file in files:local_map[bucketName][file] = Truedef main():for (k, v) in bucket_map.items():collect_local_exist(k)download_bucket(k, v, None, 0)if __name__ == "__main__":main()

存储空间

下好的文件


一个trick

我的使用方式是集成到 vscode 中, 把备份的目录拖到vscode中作为一个工作区, 写一个任务去执行这个python脚本, 在python脚本增加一个git的 pull -> commit -> push 自动提交到一个git远端仓库备份. 以后只需要打开这个工作区, 按快捷键 ctrl + shift + b 即可执行任务进行备份.
很多日常使用的工具都集成到 vscode 中, 因为写工具插件太方便了.

others-七牛云图床备份相关推荐

  1. 域名使用cname方式跳转不到新域名_七牛云图床和Markdown使用

    1.图床是什么? 图床一般是指储存图片的服务器,有国内和国外之分.国外的图床由于有空间距离等因素决定访问速度很慢影响图片显示速度.国内也分为单线空间.多线空间和cdn加速三种.来自百度百科 2.为什么 ...

  2. ssl证书 所属项目怎么上传_Typora + 七牛云图床快速配置,告别手动上传图片!...

    大家好,我是zeroing,本文将介绍关于 Typora 软件如何配置七牛云图床,实现图片即插即用,可以先看一下最终效果! 可以看到图片借助 Typora 软件自动将本地存储转化为第三方图片网络链接 ...

  3. 无水印上传本地图片到网络获取地址+小书匠使用 +github和 七牛云 图床绑定--菜鸟小回

    无水印上传本地图片到网络获取地址+小书匠使用 +github和 七牛云 图床绑定 简介: 最近开始写博客,缺少一个Markdown编辑器.寻找了两三天终于找到了这款<小书匠>,可复制粘图, ...

  4. 七牛云图床 + PicGo图床

    一.概述 最近在做一个个人博客项目,发现博客中会插入很多图片,怎么存储成了问题,经过一番查询发现大家都是用的图床工具,之前了解过七牛云,注册认证后有10G永久免费空间,每月10G国内和10G国外流量, ...

  5. PicGo + 七牛云图床配置

    PicGo + 七牛云图床配置 自从使用 Typecho 的博客系统后,也发现了一些不便,比如写文章需要上传图片,因为用的 Typora 感谢传图有点费劲(可能多数 Markdown 编辑器都会遇到吧 ...

  6. Typora + 七牛云图床快速配置,告别手动上传图片!

    大家好,我是zeroing,本文将介绍关于 Typora 软件如何配置七牛云图床,实现图片即插即用,可以先看一下最终效果! 可以看到图片借助 Typora 软件自动将本地存储转化为第三方图片网络链接 ...

  7. 网站域名、备案、七牛云图床重新搭建与博客整理

    最近碰上了一个问题,七牛云开始回收测试域名,结果导致我的图床有些失灵.一些软件资源都无法下载.其实这个问题在前一段不蒜子统计修改的博客里已经有兆头了.不过当时没注意.最后还是被逼得只能购买了域名,各类 ...

  8. 使用PicGo配置七牛云图床(图文步骤详细)

    5月19日更新:昨天Gitee对平台的代码又开始了审查功能,本地剩余一部分没有放到七牛云上的图片又没法看了,建议大家能换还是尽量快点换吧,链接一直失效谁来都顶不住呀,我用了两个月感觉体验还是很不错的, ...

  9. 七牛云图床开启HTTPS域名的两种方式

    我的原文:https://hijerry.cn/p/64756.html https下的http图片 因为自己一直用的是七牛云来管理博客图片,发现在chrome下用https访问博客时看不到博客里的图 ...

最新文章

  1. 机器学习基础专题:随机变量
  2. 手机通过WIFI连上ZXV10 H618B路由器但不能上网问题的解决
  3. python 查看 .npy文件 和 .pkl 文件的方法
  4. java适配器模式应用_java笔记--适配器模式的运用
  5. Linux内存管理(一)——从硬件角度看内存管理
  6. mysql取系统当前时间的函数
  7. 限制文本输入框只能输入0-9数字
  8. ssh 免密码登录---问题
  9. python怎么弄成黑色背景图片_怎么能把图片的黑色背景改成透明背景
  10. 大型门户网站架构分析[转]
  11. Android 使用handler实现线程间发送消息 (主线程 与 子线程之间)、(子线程 与 子线程之间)
  12. 多卡聚合路由器在视频可视化指挥调度的解决方案
  13. wint_t和wchar_t区别putwchar()iswalpha()iswcntrl()iswdigit()iswpunct()
  14. canpro脚本_shell脚本实现-----自动巡检脚本.sh
  15. STM32F103的DAC实现播放WAV音乐
  16. c++,kmin,kmax
  17. 投影仪分辨率以及对应的投影幕布比例
  18. jupyter notebook 实用快捷键大全
  19. 蓝桥杯精选赛题系列——统计数字
  20. 【论文笔记】基于生成对抗网络的强化学习算法的研究

热门文章

  1. pay 和 put的用法
  2. 【PLC】西门子S7-1200 WINCC:立体车库
  3. 高级软考项目管理课第一章后习题
  4. Windows10安装mysql-8.0.28-winx64
  5. [一日一教学](15)设置文件属性:attrib
  6. Yakit: 集成化单兵安全能力平台使用教程·MITM交互式劫持篇
  7. PDF文件中的图片提取
  8. 上传大型视频文件到服务器,解决方案?
  9. 曾经难忘的经历1--保研路
  10. 无线应急广播系统方案