web-dev-qa-db-fra.com

Utilisez curl pour télécharger un dossier Dropbox via un lien partagé (pas un lien public)

Dropbox facilite le téléchargement par programmation d'un seul fichier via curl (EX: curl -O https://dl.dropboxusercontent.com/s/file.ext). C'est un peu plus délicat pour un dossier (dossier de répertoire normal, non zippé). Le lien partagé pour un dossier, par opposition à un fichier, n'est pas lié directement au dossier zippé (Dropbox zippe automatiquement le dossier avant qu'il ne soit téléchargé). Il semblerait que vous pouvez simplement ajouter ?dl=1 à la fin du lien, car cela lancera directement le téléchargement dans un navigateur. Cependant, cela pointe vers un document html intermédiaire qui redirige vers le dossier Zip réel et ne semble pas fonctionner avec curl. Est-il possible d'utiliser curl pour télécharger un dossier via un lien partagé? Je me rends compte que la meilleure solution serait d'utiliser l'API Dropbox, mais pour ce projet, il est important de le garder aussi simple que possible. De plus, la solution doit être intégrée dans un script shell bash.

38
USCFan13

Cela semble possible avec curl en utilisant le -L option. Cela force curl à suivre la redirection. De plus, il est important de spécifier un nom de sortie avec une extension .Zip, car la valeur par défaut sera un nom alphanumérique aléatoire sans extension. Enfin, n'oubliez pas d'ajouter le ?dl=1 à la fin du lien. Sans cela, curl n'atteindra jamais la page de redirection.

curl -L -o newName.Zip https://www.dropbox.com/sh/[folderLink]?dl=1
85
USCFan13
  1. Suivez les redirections (utilisez -L). Votre problème immédiat est que Curl ne suit pas les redirections.

  2. Définissez un nom de fichier. (Optionnel)

    • Dropbox envoie déjà un En-tête de disposition de contenu avec son nom de fichier Dropbox.
      Il n'y a aucune raison de spécifier le nom de fichier si vous utilisez les bons indicateurs curl.
    • Inversement, vous pouvez forcer un nom de fichier en utilisant quelque chose de votre choix.

Utilisez l'une de ces commandes:

curl https://www.dropbox.com/sh/AAbbCCEeFF123?dl=1 -O -J -L

Conserver/écrire le nom de fichier distant (-O, -J) et suit toutes les redirections (-L).

  • Cette même ligne fonctionne pour les fichiers partagés individuellement ou des dossiers entiers.
  • Les dossiers seront enregistrés en tant que .Zip automatiquement (en fonction du nom du dossier).
  • N'oubliez pas de modifier le paramètre ?dl=0 à ?dl=1 (voir les commentaires).

OU:

curl https://www.dropbox.com/sh/AAbbCCEeFF123?dl=1 -L -o [filename]

Suivez la redirection (-L) et définit un nom de fichier (-o) de votre choix.



REMARQUE: en utilisant le -J drapeau en général:

AVERTISSEMENT: exercez une utilisation judicieuse de cette option, en particulier sous Windows. Un serveur non autorisé pourrait vous envoyer le nom d'un DLL ou autre fichier qui pourrait éventuellement être chargé automatiquement par Windows ou un logiciel tiers.

Veuillez consulter: https://curl.haxx.se/docs/manpage.html#OPTIONS (Voir: - O , - J , - L , - o ) pour plus.

9
bshea