curl .gz y canalícelo para descompresión

13

Estoy tratando de descargar algunos .gzarchivos (NB no .tar.gzunos) de las URL dadas y descomprimirlos para sobrescribir los archivos existentes, si los hay.

Para cada descarga individual, probé lo siguiente:

curl -O $URL | gunzip -f

Sin embargo, esto no funciona, ya que no pudo con: gzip: stdin: unexpected end of file. Ejecuté una serie de este comando dentro de un script de shell bash.

Si derramé el comando en dos pasos explícitos, es decir, primero descargue el archivo y luego descomprima el .gzarchivo, funciona.

¿Por qué la versión canalizada no funciona?

Skyork
fuente
1
¿Estás seguro de que curl -Orealmente transmite el archivo a la salida estándar? Quizás estás pensando wget -O-?
Steeldriver
@steeldriver debes publicar eso como respuesta curl | tar xz ...
Panther
También existe --compressed, pero esto funciona solo para respuestas comprimidas.
kenorb

Respuestas:

18

Una tubería (representada por el |símbolo) envía la salida estándar de un proceso a la entrada estándar de otro. En su caso, parece que desea utilizar un archivo con nombre, por lo que una tubería no es apropiada, específicamente, no hay nada que canalizar (de ahí el gunziperror) porque el contenido remoto va a un archivo local. En cambio, necesitaría extraer el nombre del archivo, por ejemplo, de su URL, algo así como (usando las capacidades de manipulación de cadenas incorporadas de bash)

curl -O "$URL" && gunzip -f "${URL##*/}"

Si desea usar una tubería, entonces la forma de hacerlo sería algo así como

curl "$URL" | gunzip -c

(sin la -Oopción) para que curltransmita el contenido remoto stdoutdesde donde se puede canalizar gunzip, pero luego deberá redirigir la gunzipsalida para sobrescribir el archivo sin comprimir de destino, según corresponda.

conductor de acero
fuente
5

Siga las redirecciones al descargar. A veces, un servidor web tiene redireccionamientos ocultos por razones de seguridad y / o aleatorias. Si no sigue la redirección, se descargan los datos incorrectos y su aplicación que lee los datos canalizados se confunde. Puedes seguir los redireccionamientos con curl usando la bandera -L.

curl -L https://example.com/mygzip.tar.gz | tar zxv
Jam Risser
fuente