Primero, el problema específico: en Linux, uso zcat para listar un archivo .zip. En osx, zcat parece agregar automáticamente .Z al nombre del archivo. Varias personas sugieren reemplazar zcat con gzcat; ¡Sin embargo, gzcat se queja de que el archivo no está en formato gzip!
'archivo' muestra esto: ... Zip datos de archivo, al menos v2.0 para extraer
Entonces, ni zcat ni gzcat funcionarán en osx, ¿qué puedo hacer?
Tengo un script de tamaño mediano en bash que usa zcat / gzcat, sed awk y otras utilidades básicas para procesar una cantidad de archivos. Me gustaría duplicar ese entorno en mi computadora portátil osx para poder trabajar sin conexión. ¿Alguna sugerencia general de cómo puedo evitar ese dolor? Espero que este sea un flujo de trabajo bastante rutinario, por lo que debe haber sido resuelto por otros.
zip
para tratar con archivos zip, nogzip
.Respuestas:
Tienes razón. Es un comportamiento molesto.
Prueba esto:
fuente
zcat
leerá.zip
y.Z
archivos. El problema aquí no es uno de stdin vs. archivo con nombre, es que los mantenedores de Linux de los programas modificadosgzcat
para leer una gran cantidad de tipos de archivos no relacionados.|
para canalizar a otro proceso:cat < foo.txt.gz | wc
Sé que esta es una vieja pregunta. Sin embargo, encontré una solución de un hilo de github aún más antiguo .
Simplemente puede usar
gunzip -c
eso funciona de manera similar azcat
sin los errores en Mac OS X.fuente
Puede instalar utilidades GNU para Mac OS X, por ejemplo, usando homebrew (ejecutar
brew install coreutils gnu-sed
, que instalagzcat
et al. Ygsed
). Esto le proporcionará la implementación de GNU de cada comando.Luego, para facilitarle la vida, haga una variable para cada comando (por ejemplo
sed=gsed
, y úsela$sed
posteriormente), o simplemente alínelos (por ejemploalias sed=gsed
) en cualquier script que escriba. He escrito un Gist sobre esto para su conveniencia: gnu-tools-for-mac.sh . Ponga (o incluya) este código en la parte superior de sus scripts.Utilice la implementación de GNU para comprimir y extraer los archivos. Yo diría que no puedes mezclar los usos de la implementación de OS X y GNU.
fuente
/usr/local/opt/coreutils/libexec/gnubin
a suPATH
, lo que los hará disponibles sin elg
prefijo.¡Acabo de probar esto y encontré algo muy interesante! Para los
gz
archivos, se espera que se ejecutengzcat
en Mac OS.Solución 1
gzcat /path/to/file.gz
y debería funcionar.zcat /path/to/file.gz
te dará un error.Solución 2
zcat
y funcionará.cat /path/to/file.gz | zcat
funcionará.¡Espero que esto ayude!
fuente
La versión de Mac OS X
gzip(1)
no admite la lectura de archivos zip . Desde la página del manual:Pero la versión de Linux (GNU) sí .
Los terceros han empaquetado GNU gzip para Mac OS X; Puede encontrarlos en una búsqueda web. Ese es probablemente el camino de menor resistencia.
fuente
Es curioso, tuve el mismo problema al ejecutar un
bash
-scriptbash somescript.sh
, que ejecutó un bucle forgzcat
dentro. Pero probando estas cosas dentro delsomescript.sh
-script ...:zcat < file.txt.gz
brew install coreutils
, pero no obstante, reinstalé:brew reinstall coreutils
gunzip -c file.txt.gz
... ascendió a nada ...
Pero también usé una referencia a un directorio:
SOMEDIR="~/DIR1/DIR2/DATA"
Lo cual se interpreta como
~/DIR1/DIR2/DATA
y aparentemente no funciona dentro delbash
script dentromacOS
. Esto funcionó:SOMEDIR="${HOME}/DIR1/DIR2/DATA"
Lo cual se interpreta como
/Users/someuser/DIR1/DIR2/DATA
. No sé por qué, no soy un experto en macOS-BASH-techie, pero funcionó junto con mi código original ...gzcat file.txt.gz | awk '{ print $1, $2, $3, $4, $5, $6 }' > ${SOMEDIR}/new.file.txt
.... dentro de mi
somescript.sh
-script.Quizás sea útil para alguien.
Mejor,
Lijadora
fuente