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>