Non c'è bisogno di loop o altro che find
e gzip
:
find . -type f ! -name '*.gz' -exec gzip "{}" \;
Questo trova tutti i file regolari dentro e sotto la directory corrente i cui nomi non terminano con .gz
estensione (ovvero tutti i file che non sono già compressi). Invoca gzip
su ciascun file individualmente.
Modifica, basata sul commento di user unknown
:
Le parentesi graffe ({}
) vengono sostituiti con il nome del file, che viene passato direttamente, come una singola parola, al comando che segue -exec
come puoi vedere qui:
$ touch foo
$ touch "bar baz"
$ touch xyzzy
$ find . -exec echo {} \;
./foo
./bar baz
./xyzzy
find . -type f | while read file; do gzip "$file"; done
Preferirei gzip -r ./
che fa la stessa cosa ma è più breve.