ver varios otro mover ejemplos directorios crear copiar contenido comandos carpeta basicos archivos archivo linux bash shell loops gzip

linux - varios - Cómo gzip todos los archivos en todos los subdirectorios en bash



mover varios archivos en linux (3)

Quiero recorrer los subdirectorios de mi ubicación actual y gzip cada archivo por separado. Para comprimir archivos en un directorio, uso

for file in *; do gzip "$file"; done

pero esto solo puede funcionar en el directorio actual y no en los subdirectorios del directorio actual. ¿Cómo puedo reescribir las declaraciones anteriores para que también comprima los archivos en todos los subdirectorios?


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 en y debajo del directorio actual cuyos nombres no terminan con la extensión .gz (es decir, todos los archivos que aún no están comprimidos). Invoca gzip en cada archivo individualmente.

Editar, basado en el comentario del 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 puede ver aquí:

$ touch foo $ touch "bar baz" $ touch xyzzy $ find . -exec echo {} /; ./foo ./bar baz ./xyzzy


Preferiría gzip -r ./ que hace lo mismo pero es más corto.


find . -type f | while read file; do gzip "$file"; done