2015-10-11 4 views
2

Je souhaite créer un script bash qui se connectera à mon compte google drive et sauvegardera mon dossier principal. J'ai fait quelques recherches et je sais que nous avons besoin d'OAuth pour l'utilisation de l'API Google Drive, mais je suis encore relativement nouveau et j'ai pensé que je pouvais obtenir de solides conseils de la part de la communauté de la pile.Script Bash pour sauvegarder des données sur google drive

+1

voir http://stackoverflow.com/questions/24554638/uploade-and-updating-files-to-google-drive-via-cmd –

Répondre

3

Je suppose que vous n'avez pas besoin de réinventer la roue, utilisez gdrive et vous êtes bon pour aller

SETUP:

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

Maintenant, il suffit de lancer drive pour démarrer la processus d'authentification. Vous aurez un lien comme celui-ci pour coller et naviguez dans votre navigateur Web:

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 

Authentifier et de fournir l'autorisation de l'application pour accéder à votre Google Drive, et vous serez fourni une vérification code pour copier et coller dos à votre shell:

Enter verification code: 4/9gKYAFAJ326XIP6JJHAEhs342t35LPiA5QGW0935GHWHy9 

USAGES:

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

SRC:

backing-up-linux-server-files-to-google-drive

gdrive


REMARQUE:

Si vous voulez vraiment construire un script bash jeter un oeil à ce gist, à savoir:

  • glane automatiquement le type MIME du fichier
  • ajouts
  • fichiers multiples
  • supprime le préfixe de répertoire de fichier
  • œuvres avec les noms de fichiers avec des espaces
  • utilise dotfile pour la configuration et le jeton
  • Configuration interactive
  • télécharge dans le dossier cible si le dernier l'argument ressemble à un ID de dossier
  • sortie plus tranquille
  • utilise des drapeaux de ligne de commande plus pour une meilleure lisibilité
  • gaz en ajoutant 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 "[email protected]" 
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 
+1

réponse Impressionnant! – janos

+0

il devrait être «conduire environ» au premier lancement, pour définir la clé https://github.com/prasmussen/gdrive#other. Aussi, je pense que la commande a changé en 'gdrive', bien que' drive' fonctionne toujours –