私はファイルをアップロードするには、次の構文を使用します。cURL:アップロード中に進捗情報を表示する方法は?
curl --form [email protected] --form press=OK [URL]
進行状況を表示する方法は?どうも。
私はファイルをアップロードするには、次の構文を使用します。cURL:アップロード中に進捗情報を表示する方法は?
curl --form [email protected] --form press=OK [URL]
進行状況を表示する方法は?どうも。
これは私が私のビルドスクリプトのいずれかで使用するものです。
curl "${UPLOAD_URL}" \
--progress-bar \
--verbose \
-F build="${BUILD}" \
-F version="${VERSION}" \
-F ipa="@${IPA};type=application/octet-stream" \
-F assets="@-;type=text/xml" \
-F replace="${REPLACE}" \
-A "${CURL_FAKE_USER_AGENT}" \
<<< "${ASSETS}" \
| tee -a "${LOG_FILE}" ; test ${PIPESTATUS[0]} -eq 0
-F
と-A
オプションは、おそらくあなたに興味がありませんが、役に立つ部品は以下のとおりです。
curl "${UPLOAD_URL}" --progress-bar
これはアップロード中にプログレスバー(代わりにデフォルトの「進捗状況メーター」)を表示するようcurl
を伝え、そして:
| tee -a "${LOG_FILE}" ; test ${PIPESTATUS[0]} -eq 0
012また、ログファイルにコマンドの出力を追加し、
はエコーstdout
にそれをです。 (bashスクリプトである)、このラインの終了ステータスがtee
が実際にある最後のコマンドであるため、curl
コマンドが必要tee
コマンド(の終了ステータスが返されていない同一の終了コードであるようtest ${PIPESTATUS[0]} -eq 0
部分は、それなりますこの行で実行され、curl
ではありません)。 man curl
から
:
PROGRESS METER
curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc.
curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the terminal, it disables the progress meter as otherwise it would mess up the
output mixing progress meter and response data.
If you want a progress meter for HTTP POST or PUT requests, you need to redirect the response output to a file, using shell redirect (>), -o [file] or similar.
It is not the same case for FTP upload as that operation does not spit out any response data to the terminal.
If you prefer a progress "bar" instead of the regular meter, -# is your friend.
OPTIONS
-#, --progress-bar
Make curl display progress as a simple progress bar instead of the standard, more informational, meter.
NB! 'tee'コマンドはダウンロードの進行状況に関する情報を得るために必要です。 'tee'を使いたくない場合は' grep -v '^ uniqueStringNeverHappens $' 'コマンドを使います。 more info:http://stackoverflow.com/a/17178410/751932 – Speakus
また、 '>/dev/null' – asymmetric
これは私のためにはうまくいかないようです:( EDIT:問題は私が欲しかったことでしたどのくらい時間がかかりますので、 'curl --progress-bar --verbose ... 'を使ってプログレスバーが表示されないようにしました。 –
私は受け入れ答えのコマンドのリダイレクトとのトラブルがあったとプログレスバーが表示できるようにするファイルに応答出力を配置します-o
オプションを発見しました。
curl --progress-bar \
-o upload.txt \
-H ${SOME_AUTH_HEADER} \
-T ${SOME_LARGE_FILE} \
"${UPLOAD_URL}"
希望の結果を得るためのもう1つのオプション。
注:manページからこの行の重視は、ちょうど--progress-bar
を指定するときにプログレスバーが表示されない原因の根本原因を理解することが重要です。
If you want a progress meter for HTTP POST or PUT requests,
you need to redirect the response output to a file,
using shell redirect (>), -o [file] or similar.
他のすべての回答は、curlの元の出力を(ログ)ファイルに書き込む必要があるという問題があります。しかし、これはすべての場合には望ましくないかもしれない。
問題は、カールがその後、SDOUTに書き込まれているサーバーの応答が期待されているプログレスバー/メーターを、隠すことです。 基本的に出力をファイルにリダイレクトして、バーを再度表示することができます。しかし、我々はそれをしたいので、/dev/null
とtee
は、ここで私たちを助けることができません。
tee
(およびサーバに渡され
curl --progress-bar -T "${SOME_LARGE_FILE}" "${UPLOAD_URL}" | tee /dev/null
応答)およびファイルに(これは私たちが必要とするのではなく、我々は/dev/null
を使うと、これは問題ではありません)。当然のカール開発者は、楽しみのためにプログレスバーを非表示にしませんでした
注意。ここでは、サーバーの結果が常に表示されるとは限りません。数秒間しか表示されない場合もありますが、これについて気にしなければ、解決策は素晴らしいものです。
http://curl.haxx.se/docs/manpage.html進捗状況のセクションを参照してください。私はあなたがファイルに出力をパイプする必要があると思うが、肯定的ではない。 – Corbin
あなたはそうです。どうも! – Determinant