No hay necesidad de bucles ni nada más que find
y gzip
:
find . -type f ! -name '*.gz' -exec gzip "{}" \;
Esto encuentra todos los archivos regulares dentro y debajo del directorio actual cuyos nombres no terminan con el .gz
extensión (es decir, todos los archivos que aún no están comprimidos). Invoca gzip
en cada archivo individualmente.
Editar, según el comentario de user unknown
:
Las llaves ({}
) se reemplazan con el nombre del archivo, que se pasa directamente, como una sola palabra, al comando que sigue a -exec
como puedes ver aquí:
$ touch foo
$ touch "bar baz"
$ touch xyzzy
$ find . -exec echo {} \;
./foo
./bar baz
./xyzzy
find . -type f | while read file; do gzip "$file"; done
Prefiero gzip -r ./
que hace lo mismo pero es más corto.