Io uso la seguente sintassi per caricare i file:cURL: come visualizzare le informazioni di avanzamento durante il caricamento?
curl --form [email protected] --form press=OK [URL]
Come visualizzare il progresso? Grazie.
Io uso la seguente sintassi per caricare i file:cURL: come visualizzare le informazioni di avanzamento durante il caricamento?
curl --form [email protected] --form press=OK [URL]
Come visualizzare il progresso? Grazie.
Questo è quello che uso in uno dei miei script di build:
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
Il -F
e -A
opzioni probabilmente non saranno di vostro interesse, ma le parti utili sono:
curl "${UPLOAD_URL}" --progress-bar
che indica a curl
di mostrare una barra di avanzamento (anziché il "misuratore di avanzamento" predefinito durante il caricamento, e:
che accoda l'output del comando a un file di registro e anche echo a stdout
. La parte test ${PIPESTATUS[0]} -eq 0
fa in modo che lo stato di uscita di questa riga (che è in uno script bash) sia lo stesso codice di uscita restituito dal comando curl
e non lo stato di uscita del comando tee
(necessario perché tee
è in realtà l'ultimo comando eseguito in questa riga, non curl
).
Da 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! comando 'tee' necessario per ottenere informazioni sullo stato del download. se non vuoi usare 'tee', usa il comando' grep -v '^ uniqueStringNeverHappens $' '. ulteriori informazioni: http://stackoverflow.com/a/17178410/751932 – Speakus
In alternativa: '>/dev/null' – asymmetric
Questo non sembra funzionare per me :( EDIT: non importa, il problema era che volevo tempo quanto tempo ci vuole, quindi ho usato 'time curl --progress-bar --verbose ...' che impedisce la visualizzazione della barra di avanzamento. –
Ho avuto problemi con il reindirizzamento comando del risposta accettata e hanno trovato l'opzione -o
metterà l'uscita di risposta in un file che permette la barra di avanzamento di presentarsi.
curl --progress-bar \
-o upload.txt \
-H ${SOME_AUTH_HEADER} \
-T ${SOME_LARGE_FILE} \
"${UPLOAD_URL}"
Solo un'altra opzione per ottenere il risultato desiderato.
NOTA: L'enfasi su questa linea dalla pagina man è importante capire la causa principale del perché la barra di avanzamento non viene visualizzata quando appena specificando --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.
Tutti gli altri risposta qui hanno il problema che essi richiedono di scrivere l'output originale del ricciolo in un file (log). Questo potrebbe tuttavia non essere richiesto in tutti i casi.
Il problema è che l'arricciatura nasconde la barra di avanzamento/metro, quando è attesa una risposta del server, che viene quindi scritta in sdout. Quindi, in pratica, è possibile reindirizzare l'output su un file per mostrare nuovamente la barra. Tuttavia non vogliamo che, così /dev/null
e tee
noi possiamo aiutare qui:
curl --progress-bar -T "${SOME_LARGE_FILE}" "${UPLOAD_URL}" | tee /dev/null
uscita di Curl è passato al tee
che scrive l'output sia alla console (che vogliamo vedere la barra di avanzamento e anche il server risposta) e in un file (che non è necessario da noi, ma poiché si utilizza /dev/null
ciò non ha importanza).
Nota che gli sviluppatori di arricciature non hanno nascosto la barra di avanzamento per divertimento.In questo caso qui potresti non vedere sempre il risultato del server o solo qualche secondo, ma se non ti interessa, la soluzione è buona.
http://curl.haxx.se/docs/manpage.html Vedere la sezione sul misuratore di avanzamento. Sospetto che sia necessario reindirizzare l'output su un file, sebbene non sia positivo. – Corbin
Hai ragione. Grazie! – Determinant