Eu tenho um diretório de logs que gostaria de configurar um trabalho para compactar usandogzip. O problema é que não quero recompactar os logs que já compactei.
Eu tentei usar ls | grep -v gz | gzip
, mas isso não parece funcionar.
Existe uma maneira de fazer isso? Basicamente, quero compactar todos os arquivos do diretório que não terminam em .gz.
Responder1
Você pode simplesmente fazer:
gzip *
O gzip informará que ignora os arquivos que já possuem um .gz
final.
Se essa mensagem atrapalhar, você pode usar:
gzip -q *
O que você tentou não funcionou, pois gzip
não lê os nomes dos arquivos para compactar do stdin, para que isso funcionasse você teria que usar:
ls | grep -v gz | xargs gzip
Você excluirá arquivos com o padrão gz
em qualquer lugar do nome do arquivo, não apenas no final.¹ Você também deve observar que analisar a saída de ls
é perigoso quando há nomes de arquivos com espaços, novas linhas, etc., envolvidos.
Uma solução mais limpa, sem depender de gzip
pular arquivos com .gz
final, é que também lida com arquivos não compactados em subdiretórios:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Conforme izkata
comentado: usar .gz
sozinho para melhorar isso, não funcionaria. Você precisaria usar grep -vF .gz
ou grep -v '\.gz$'
. Isso ainda deixa o perigo de processar ls
a saída