Use curl to download a Dropbox folder via shared link (not public link)

MacosBashUnixCurlDropbox

Macos Problem Overview


Dropbox makes it easy to programmatically download a single file via curl (EX: curl -O https://dl.dropboxusercontent.com/s/file.ext). It is a little bit trickier for a folder (regular directory folder, not zipped). The shared link for a folder, as opposed to a file, does not link directly to the zipped folder (Dropbox automatically zips the folder before it is downloaded). It would appear that you could just add ?dl=1 to the end of the link, as this will directly start the download in a browser. This, however, points to an intermediary html document that redirects to the actual zip folder and does not seem to work with curl. Is there anyway to use curl to download a folder via a shared link? I realize that the best solution would be to use the Dropbox api, but for this project it is important to keep it as simple as possible. Additionally, the solution must be incorporated into a bash shell script.

Macos Solutions


Solution 1 - Macos

It does appear to be possible with curl by using the -L option. This forces curl to follow the redirect. Additionally, it is important to specify an output name with a .zip extension, as the default will be a random alpha-numeric name with no extension. Finally, do not forget to add the ?dl=1 to the end of the link. Without it, curl will never reach the redirect page.

curl -L -o newName.zip https://www.dropbox.com/sh/[folderLink]?dl=1

Solution 2 - Macos

  1. Follow redirects (use -L). Your immediate problem is that Curl is not following redirects.

  2. Set a filename. (Optional)

  • Dropbox already sends a Content-Disposition Header with its Dropbox filename.
    There is no reason to specify the filename if you use the correct curl flags.
  • Conversely, you can force a filename using something of your choosing.

Use one of these commands:

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

Preserve/write the remote filename (-O,-J) and follows any redirects (-L).

  • This same line works for both individually shared files or entire folders.
  • Folders will save as a .zip automatically (based on folder name).
  • Don't forget to change the parameter ?dl=0 to ?dl=1 (see comments).

OR:

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

Follow any redirects (-L) and set a filename (-o) of your choosing.



NOTE: Using the -J flag in general: >WARNING: Exercise judicious use of this option, especially on Windows. A rogue server could send you the name of a DLL or other file that could possibly be loaded automatically by Windows or some third party software.

Please consult: https://curl.haxx.se/docs/manpage.html#OPTIONS (See: -O, -J, -L, -o) for more.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionUSCFan13View Question on Stackoverflow
Solution 1 - MacosUSCFan13View Answer on Stackoverflow
Solution 2 - MacosB. SheaView Answer on Stackoverflow