Você pode apenas fazer:
gzip *
O gzip irá avisar que ele pula os arquivos que já possuem .gz
final.
Se essa mensagem ficar no caminho, você pode usar:
gzip -q *
O que você tentou não funcionou, porque gzip
não leu os nomes de arquivo dos arquivos para comprimir de 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 no nome do arquivo, não apenas no final.¹ Você também deve observar que a análise da saída de ls
é perigosa quando você tem nomes de arquivos com espaços, novas linhas, etc., estão envolvidos.
Uma solução mais limpa, não contando com gzip
para pular arquivos com .gz
ending, que também lida com arquivos não compactados em subdiretórios:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Como izkata
comentou: 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
'output