将数据备份到谷歌驱动器的 Bash 脚本

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33063673/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 13:42:56  来源:igfitidea点击:

Bash script to backup data to google drive

bashshellgoogle-drive-realtime-api

提问by halapgos1

I want to create a bash script that will log into my google drive account and backup my main folder. I've done a bit of research and I know we need some sort of OAuth for using the Google Drive API but I'm still fairly new so I thought I can get some solid guidance from the stack community.

我想创建一个 bash 脚本,该脚本将登录到我的 Google Drive 帐户并备份我的主文件夹。我做了一些研究,我知道我们需要某种 OAuth 来使用 Google Drive API,但我还是个新手,所以我想我可以从堆栈社区获得一些可靠的指导。

回答by CONvid19

I guess you don't need to re-invent the wheel, use gdriveand you're good to go

我想你不需要重新发明轮子,使用gdrive就可以了

SETUP:

设置:

wget -O drive "https://drive.google.com/uc?id=0B3X9GlR6EmbnMHBMVWtKaEZXdDg"  
mv drive /usr/sbin/drive  
chmod 755 /usr/sbin/drive 

Now, simply run driveto start the authentication process. You'll get a link like thisto paste and browse to in to your web browser:

现在,只需运行drive即可启动身份验证过程。你会得到一个这样的链接,粘贴并浏览到你的网络浏览器:

Go to the following link in your browser:  
https://accounts.google.com/o/oauth2/auth?client_id=123456789123-7n0vf5akeru7on6o2fjinrecpdoe99eg.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&state=state 

Authenticate and provide permission for the application to access your Google Drive, and then you'll be provided a verification code to copy and paste back in to your shell:

对应用程序进行身份验证并提供访问您的 Google Drive 的权限,然后您将获得一个验证码以复制并粘贴回您的 shell:

Enter verification code: 4/9gKYAFAJ326XIP6JJHAEhs342t35LPiA5QGW0935GHWHy9  


USAGE:

用法:

drive upload --file "/some/path/somefile.ext" 


SRC:

资源中心:

Backing up a Directory to Google Drive on CentOS 7

在 CentOS 7 上将目录备份到 Google Drive



NOTE:

笔记:

If you really want to build a bash script take a look at this gist, i.e.:

如果您真的想构建一个 bash 脚本,请查看这个gist,即:

  • automatically gleans MIME type from file
  • uploads multiple files
  • removes directory prefix from filename
  • works with filenames with spaces
  • uses dotfile for configuration and token
  • interactively configuring
  • uploads to target folder if last argument looks like a folder id
  • quieter output
  • uses longer command line flags for readability
  • throttle by adding curl_args="--limit-rate 500K"to $HOME/.gdrive.conf
  • 自动从文件中收集 MIME 类型
  • 上传多个文件
  • 从文件名中删除目录前缀
  • 使用带空格的文件名
  • 使用 dotfile 进行配置和令牌
  • 交互式配置
  • 如果最后一个参数看起来像文件夹 ID,则上传到目标文件夹
  • 更安静的输出
  • 使用更长的命令行标志以提高可读性
  • 通过添加curl_args="--limit-rate 500K"到 油门$HOME/.gdrive.conf


#!/bin/bash
# based on https://gist.github.com/deanet/3427090
#
# useful $HOME/.gdrive.conf options:
#    curl_args="--limit-rate 500K --progress-bar"


browser="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"

destination_folder_id=${@: -1}
if expr "$destination_folder_id" : '^[A-Za-z0-9]\{28\}$' > /dev/null
then
    # all but last word
    set -- "${@:0:$#}"
else
    # upload to root
    unset destination_folder_id
fi

if [ -e $HOME/.gdrive.conf ]
then
    . $HOME/.gdrive.conf
fi

old_umask=`umask`
umask 0077

if [ -z "$username" ]
then
    read -p "username: " username
    unset token
    echo "username=$username" >> $HOME/.gdrive.conf
fi

if [ -z "$account_type" ]
then
    if expr "$username" : '^[^@]*$' > /dev/null || expr "$username" : '.*@gmail.com$' > /dev/null
    then
        account_type=GOOGLE
    else
        account_type=HOSTED
    fi
fi

if [ -z "$password$token" ]
then
    read -s -p "password: " password
    unset token
    echo
fi

if [ -z "$token" ]
then
    token=`curl --silent --data-urlencode Email=$username --data-urlencode Passwd="$password" --data accountType=$account_type --data service=writely --data source=cURL "https://www.google.com/accounts/ClientLogin" | sed -ne s/Auth=//p`
    sed -ie '/^token=/d' $HOME/.gdrive.conf
    echo "token=$token" >> $HOME/.gdrive.conf
fi
umask $old_umask

for file in "$@"
do
    slug=`basename "$file"`
    mime_type=`file --brief --mime-type "$file"`
    upload_link=`curl --silent --show-error --insecure --request POST --header "Content-Length: 0" --header "Authorization: GoogleLogin auth=${token}" --header "GData-Version: 3.0" --header "Content-Type: $mime_type" --header "Slug: $slug" "https://docs.google.com/feeds/upload/create-session/default/private/full${destination_folder_id+/folder:$destination_folder_id/contents}?convert=false" --dump-header - | sed -ne s/"Location: "//p`
    echo "$file:"
    curl --request POST --output /dev/null --data-binary "@$file" --header "Authorization: GoogleLogin auth=${token}" --header "GData-Version: 3.0" --header "Content-Type: $mime_type" --header "Slug: $slug" "$upload_link" $curl_args
done