utilizando archivos comprimidos (.gz) con scripts de línea de comandos que esperan archivos sin comprimir

0

Para ahorrar espacio en el disco, he comprimido muchos de mis archivos que uso regularmente. ¿Cuál es la mejor forma de utilizar la versión .gz de estos archivos de texto con, por ejemplo, scripts de Python?

Más específicamente, ¿hay alguna manera de canalizar el archivo comprimido en un script que espera un archivo sin comprimir?

Por ejemplo, si normalmente corriera

python test.py file.txt

¿Cómo ejecutaría el mismo comando con a file.txt.gz?

Sé que podría hacer algo como

gzip -dk file.txt.gz; python test.py file.txt; rm file.txt

Pero eso parece un poco largo aliento; ¿Hay una manera mejor / más rápida?

Constantino
fuente
Use una sustitución de proceso:python test.py <(zcat file.txt.gz)
glenn jackman
¿Cómo podría usar la sustitución de procesos en un caso en el que intervienen múltiples archivos gz?
Constantino
1
No creo que esta sea una mala pregunta conceptual. Pero en un nivel práctico, ¿qué tan grandes son estos scripts de Python que al comprimirlos realmente ahorran espacio en disco? Con un almacenamiento barato y una conectividad de entrega aún más rápida, como a través de USB 3.0, ¿cuál es el beneficio real y práctico de un esquema como este? Puedo ver un beneficio si hubiera un proceso automatizado en el que se pudiera canalizar este comando. ¿Pero a nivel humano del día a día? ¿Cuál es el beneficio real de un esquema como este?
JakeGould

Respuestas:

0

Quieres cualquiera

for file in *.txt.gz; do python test.py <(zcat "$file"); done

o

python test.py <(zcat *.txt.gz)

dependiendo de la cantidad de datos que desee pasar al programa test.py


basado en tu comentario:

proc_subs=$( printf ' <(zcat "%s")' *.txt.gz )
echo "python test.py $proc_subs -v"
#eval "python test.py $proc_subs -v"

descomenta la línea de evaluación si te gusta cómo se ve

Glenn Jackman
fuente
¿Cómo cambiaría su segunda sugerencia para manejar el caso de múltiples archivos (por llamada a Python), así como la llamada a Python que requiere opciones de bandera booleana? por ejemplo, python test.py file1.txt file2.txt -v
Constantino