Solo puedes hacer:
gzip *
gzip te dirá que omite los archivos que ya tienen un .gz
final.
Si ese mensaje se interpone en el camino, puede usar:
gzip -q *
Lo que probaste no funcionó, porque gzip
no lee los nombres de los archivos para comprimir desde stdin, para que eso funcione deberías usar:
ls | grep -v gz | xargs gzip
Excluirá los archivos con el patrón gz
en cualquier parte del nombre del archivo, no solo al final. También debe tener en cuenta que analizar la salida de ls
es peligroso cuando tiene nombres de archivos con espacios, líneas nuevas, etc.
Una solución más limpia, sin depender gzip
de omitir archivos con un .gz
final es, que también maneja archivos no comprimidos en subdirectorios:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Como se izkata
comentó: usar .gz
solo para mejorar esto, no funcionaría. Tendría que usar grep -vF .gz
o grep -v '\.gz$'
. Eso todavía deja el peligro de procesar ls
'salida
$
para que quede más claro. Y de.
todos modos no escapó , por lo que solo va a excluir archivos que comienzan congz
(ya que no tienen "ningún carácter antesgz
")