enrolle el archivo .gz y canalícelo para descomprimirlo

enrolle el archivo .gz y canalícelo para descomprimirlo

Estoy intentando descargar algunos .gzarchivos (NB, no .tar.gzalgunos) de las URL determinadas 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 funcionó porque falló con: gzip: stdin: unexpected end of file. Ejecuté una serie de este comando dentro de un script de shell bash.

Si dividí el comando en dos pasos explícitos, es decir, primero descargué el archivo y luego lo descomprimí .gz, funciona.

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

Respuesta1

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

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

Si desea utilizar 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 de destino sin comprimir según corresponda.

Respuesta2

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

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

Respuesta3

Lo siguiente hace 3 cosas

    mkdir -p ${DIR} && curl -L http://apachemirror.wuchna.com/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz | tar zxv -C ${DIR} --strip-components 1
  1. Forzar la creación del directorio de destino.
  2. Desarchiva el archivo en el directorio indicado
  3. Reemplaza el directorio raíz con el nombre del directorio dado simplemente eliminando el directorio raíz del archivo.

información relacionada