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.

zippara tratar con archivos zip, nogzip.Respuestas:
Tienes razón. Es un comportamiento molesto.
Prueba esto:
fuente
zcatleerá.zipy.Zarchivos. El problema aquí no es uno de stdin vs. archivo con nombre, es que los mantenedores de Linux de los programas modificadosgzcatpara leer una gran cantidad de tipos de archivos no relacionados.|para canalizar a otro proceso:cat < foo.txt.gz | wcSé 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 -ceso funciona de manera similar azcatsin 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 instalagzcatet 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$sedposteriormente), 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/gnubina suPATH, lo que los hará disponibles sin elgprefijo.¡Acabo de probar esto y encontré algo muy interesante! Para los
gzarchivos, se espera que se ejecutengzcaten Mac OS.Solución 1
gzcat /path/to/file.gzy debería funcionar.zcat /path/to/file.gzte dará un error.Solución 2
zcaty funcionará.cat /path/to/file.gz | zcatfuncionará.¡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 forgzcatdentro. Pero probando estas cosas dentro delsomescript.sh-script ...:zcat < file.txt.gzbrew install coreutils, pero no obstante, reinstalé:brew reinstall coreutilsgunzip -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/DATAy aparentemente no funciona dentro delbashscript 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