Téléchargement de Gros Fichiers depuis Google Drive via Script Wget

Dans un scénario professionnel récent, une tâche urgente a nécessité le déploiement d'un fichier modèle conséquent sur un serveur. Ce fichier était stocké sur Google Drive, présentant un défi : télécharger le fichier de 5 Go localement puis le transférer sur le serveur, ou le télécharger directement sur le serveur.

Le transfert local suivi d'un téléversement sur le serveur était une option chronophage et risquait d'échouer en raison d'une connexion réseau instable. La solution la plus efficace a donc été de télécharger le fichier directement sur le serveur. Cet article détaille la méthodologie employée pour accomplir cette tâche.

Méthodologie de Téléchargement avec Wget

Google Drive ne permet pas un téléchargement direct de gros fichiers via wget sans étapes supplémentaires. Il est nécessaire de gérer les liens de partage et les éventuelles redirections ou confirmations.

1. Obtention du Lien de Partage

Assurez-vous que le fichier sur Google Drive est partagé. Le lien de partage ressemble généralement à ceci :

https://drive.google.com/file/d/IDENTIFIANT_FICHIER/view?usp=sharing

L'IDENTIFIANT_FICHIER est l'identifiant unique de votre fichier. Par exemple, pour le lien https://drive.google.com/file/d/1mjIqU-c5q3qMI74XZd3UrkZek0IDTUUh/view?usp=sharing, l'identifiant est 1mjIqU-c5q3qMI74XZd3UrkZek0IDTUUh.

2. Utilisation de Wget pour le Téléchargement

Une première tentative de téléchargement avec wget peut être initiée ainsi :

wget --no-check-certificate 'https://drive.google.com/uc?export=download&id=IDENTIFIANT_FICHIER' -O NOM_FICHIER

Remplacez IDENTIFIANT_FICHIER par l'identifiant du fichier et NOM_FICHIER par le nom souhaité pour le fichier téléchargé.

3. Gestion des Redirections et Confirmations

Les fichiers volumineux (supérieurs à 100 Mo) sur Google Drive peuvent déclencher une étape de confirmation, notamment pour un scan de sécurité. Il faut contourner ce processus. Le script suivant permet d'extraire les informations nécessaires pour une requête de téléchargement complète.

#!/bin/bash

Configuration des identifiants et du nom de fichier de sortie

FILE_ID="1mjIqU-c5q3qMI74XZd3UrkZek0IDTUUh" # Remplacez par l'ID du fichier réel OUTPUT_FILENAME="unet.pth" # Remplacez par le nom de fichier souhaité

Récupération de la réponse initiale de Google Drive et stockage des cookies

Le drapeau --save-cookies est utilisé pour persister les cookies entre les requêtes

RESPONSE=$(wget --quiet --save-cookies cookies.txt
--keep-session-cookies --no-check-certificate
"https://drive.google.com/uc?export=download&id=${FILE_ID}"
-O -)

Stockage de la réponse pour débogage si nécessaire

echo "$RESPONSE" > response_debug.html

Extraction des paramètres nécessaires pour la requête de téléchargement

Ces paramètres sont souvent présents dans le HTML retourné par Google Drive

Le motif de recherche utilise des expressions régulières pour extraire les valeurs des attributs 'value'

ID_PARAM=$(echo "$RESPONSE" | grep -o 'name="id" value="[^"]"' | cut -d'"' -f4) EXPORT_PARAM=$(echo "$RESPONSE" | grep -o 'name="export" value="[^"]"' | cut -d'"' -f4) CONFIRM_PARAM=$(echo "$RESPONSE" | grep -o 'name="confirm" value="[^"]"' | cut -d'"' -f4) UUID_PARAM=$(echo "$RESPONSE" | grep -o 'name="uuid" value="[^"]"' | cut -d'"' -f4)

Vérification de l'extraction de tous les paramètres requis

if [[ -z "$ID_PARAM" || -z "$EXPORT_PARAM" || -z "$CONFIRM_PARAM" || -z "$UUID_PARAM" ]]; then echo "Erreur : Impossible d'extraire tous les paramètres requis pour le téléchargement." echo "Paramètres extraits : ID='$ID_PARAM', Export='$EXPORT_PARAM', Confirm='$CONFIRM_PARAM', UUID='$UUID_PARAM'" rm -f cookies.txt # Nettoyage des fichiers temporaires exit 1 fi

Construction de l'URL de téléchargement finale

FINAL_DOWNLOAD_URL="https://drive.usercontent.google.com/download?id=${ID_PARAM}&export=${EXPORT_PARAM}&confirm=${CONFIRM_PARAM}&uuid=${UUID_PARAM}"

echo "Début du téléchargement du fichier..." echo "URL utilisée : $FINAL_DOWNLOAD_URL"

Exécution du téléchargement final en utilisant les cookies et l'URL complète

wget --load-cookies cookies.txt
--no-check-certificate
"$FINAL_DOWNLOAD_URL"
-O "$OUTPUT_FILENAME"

Vérification du code de retour de wget pour confirmer le succès du téléchargement

if [ $? -eq 0 ]; then echo "Téléchargement du fichier réussi : $OUTPUT_FILENAME" else echo "Erreur lors du téléchargement du fichier." rm -f cookies.txt # Nettoyage des fichiers temporaires exit 1 fi

Nettoyage du fichier de cookies temporaire

rm -f cookies.txt

exit 0


<h3>4. Utilisation du Script</h3>
<ol>
    <li>Enregistrez le script dans un fichier, par exemple <code>download_gdrive.sh</code>.</li>
    <li>Modifiez les variables <code>FILE_ID</code> et <code>OUTPUT_FILENAME</code> avec les informations appropriées.</li>
    <li>Rendez le script exécutable : <code>chmod +x download_gdrive.sh</code>.</li>
    <li>Exécutez le script : <code>./download_gdrive.sh</code>.</li>
</ol>

<p>Ce processus permet de contourner la page d'avertissement de Google Drive relative à l'analyse des virus et d'assurer le téléchargement du fichier.</p>

Étiquettes: wget google drive bash scripting download

Publié le 21 juin à 17h21