Utilice gzip para comprimir los archivos en un directorio excepto los archivos .gz ya existentes

Utilice gzip para comprimir los archivos en un directorio excepto los archivos .gz ya existentes

Tengo un directorio de registros que me gustaría configurar un trabajo para comprimir usandozip. El problema es que no quiero volver a comprimir los registros que ya comprimí.

Intenté usar ls | grep -v gz | gzip, pero parece que no funciona.

¿Hay alguna forma de hacer esto? Básicamente, quiero comprimir todos los archivos del directorio que no terminen en .gz.

Respuesta1

Puedes simplemente hacer:

gzip *

gzip le dirá que omite los archivos que ya tienen un .gz final.
Si ese mensaje se interpone en tu camino, puedes usar:

gzip -q *

Lo que intentaste no funcionó, porque gzipno lee los nombres de los archivos a comprimir desde la entrada estándar, para que eso funcione tendrías que usar:

ls | grep -v gz | xargs gzip

Excluirá los archivos con el patrón gzen cualquier parte del nombre del archivo, no solo al final.¹ También debe tener en cuenta que analizar la salida de lses peligroso cuando hay nombres de archivos involucrados con espacios, nuevas líneas, etc.

Una solución más limpia, que no depende de gzipomitir archivos con una .gzterminación, es que también maneja archivos no comprimidos en subdirectorios:

find .  -type f ! -name "*.gz" -exec gzip {} \;



¹ Como izkatase comentó: usar .gzsolo para mejorar esto no funcionaría. Necesitarías usar grep -vF .gzo grep -v '\.gz$'. Eso todavía deja el peligro de procesar lsla salida.

información relacionada