web-dev-qa-db-ja.com

curlを使用して、共有リンク(パブリックリンクではない)経由でDropboxフォルダーをダウンロードします

Dropboxを使用すると、curl(EX:curl -O https://dl.dropboxusercontent.com/s/file.ext)を介してプログラムで1つのファイルを簡単にダウンロードできます。フォルダー(通常のフォルダー、zip形式ではないフォルダー)には少し注意が必要です。ファイルではなく、フォルダーの共有リンクは、zipされたフォルダーに直接リンクしません(Dropboxは、ダウンロードされる前にフォルダーを自動的に圧縮します)。 ?dl=1をリンクの最後に追加するだけでよいように見えます。これにより、ブラウザで直接ダウンロードが開始されます。ただし、これは実際のZipフォルダーにリダイレクトする中間HTMLドキュメントを指し、curlでは機能しないようです。とにかくcurlを使用して共有リンク経由でフォルダーをダウンロードする方法はありますか? Dropbox APIを使用することが最善の解決策であることを認識していますが、このプロジェクトでは、できるだけシンプルにすることが重要です。さらに、ソリューションはbashシェルスクリプトに組み込む必要があります。

38
USCFan13

-Lオプションを使用すると、curlで可能になるようです。これにより、強制的にcurlがリダイレクトに従います。さらに、デフォルトは拡張子のないランダムな英数字の名前になるため、.Zip拡張子で出力名を指定することが重要です。最後に、リンクの最後に?dl=1を追加することを忘れないでください。これがないと、curlはリダイレクトページに到達しません。

curl -L -o newName.Zip https://www.dropbox.com/sh/[folderLink]?dl=1
85
USCFan13
  1. リダイレクトに従う(-Lを使用)。差し迫った問題は、Curlがリダイレクトに従っていないことです。

  2. ファイル名を設定します。 (オプション)

    • Dropboxはすでに、Dropboxファイル名とともにContent-Disposition Headerを送信しています。
      正しいcurlフラグを使用する場合、ファイル名を指定する理由はありません。
    • 逆に、選択したものを使用してファイル名を強制することができます。

次のコマンドのいずれかを使用します。

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

リモートファイル名(-O-J)を保存/書き込み、リダイレクト(-L)に従います。

  • この同じ行は、個別に共有されたファイルまたはフォルダー全体の両方で機能します。
  • フォルダーは.Zipとして自動的に保存されます(フォルダー名に基づいて)。
  • パラメータ?dl=0?dl=1に変更することを忘れないでください(コメントを参照)。

または:

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

リダイレクト(-L)に従い、選択したファイル名(-o)を設定します。



注:-Jフラグの一般的な使用:

警告:特にWindowsでは、このオプションを慎重に使用してください。不正なサーバーは、DLLまたはWindowsまたはサードパーティソフトウェアによって自動的にロードされる可能性のある他のファイルの名前を送信する可能性があります。

相談してください: https://curl.haxx.se/docs/manpage.html#OPTIONS (参照: -O-J-L-o )その他.

9
bshea