=================
== Attt's blog ==
=================
Tech otakus save the world

windows下通过7z打包备份文件到Google drive

- Permalink

Google drive客户端设置

设置要备份的目标目录为可离线使用,这样变动会实时同步,相当于本地挂载

google drive config 1

google drive config 2

脚本

backup.bat

解释

脚本首先复制了files_dir,等于创建了一个快照,防止文件的handler被占用。然后使用7z对这个快照压缩打包,打包的目的地还是当前工作目录work_dir,不直接写到cloud是因为打包过程中可能会产生部分写入。最后将打包完成的文件移动到cloud并且清理中间文件和cloud上的历史备份。


[备注]

set "archive_date=%date:~3,4%%date:~8,2%%date:~11,2%"
  1. %date:~x,y%
    1. x: char offset
    2. y: char count
    3. 通过echo "%date%"查看日期格式
      echo date
xcopy "%files_dir%" "%files_dir%_snapshot" /s/e/i/y/q
  1. xcopy

    1. /i: 目标文件夹不存在则会创建
    2. /s: 递归(非空文件夹)
    3. /e: 递归(含空文件夹)
    4. /s/e: 通常组合使用
  2. rmdir /s/q "%files_dir%_snapshot"

    1. /s: 递归
    2. /q: 静默
start /wait "" "C:\Program Files\7-Zip\7z.exe" a -xr!*.log -p"%passwd%" -t7z -mx4 "%work_dir%\archive_%archive_date%.7z" "%files_dir%_snapshot"
  1. start /wait "" "%command%"

    1. start: 开启一个新的command执行窗口
    2. /wait: 等待执行完成后回到当前流程
  2. "%7z_dir%\7z.exe" a -xr!*.log -p"%passwd%" -t7z -mx4 "%work_dir%\archive_%archive_date%.7z" "%files_dir%_snapshot"

    1. a: 追加文件到archive
    2. -x: 排除文件
    3. r: 递归
    4. !*.log: wildcard, 还可以使用-xr @files.txt将排除的文件写到files.txt(换行分割)
    5. -mx4: 压缩率,越高处理越慢但archive体积越小
    6. -p: archive密码

[参考]