Você pode apenas fazer:
gzip *
O gzip lhe dirá que pula os arquivos que já têm um .gz
final.
Se essa mensagem atrapalhar, você pode usar:
gzip -q *
O que você tentou não funcionou, porque gzip
não lê os nomes dos arquivos para compactar a partir do stdin, para que isso funcione, você teria que usar:
ls | grep -v gz | xargs gzip
Você excluirá os arquivos com o padrão gz
em qualquer lugar do nome do arquivo, e não apenas no final.¹ Você também deve observar que analisar a saída de ls
é perigoso quando houver nomes de arquivos com espaços, novas linhas, etc.
Uma solução mais limpa, sem depender gzip
de pular arquivos com uma .gz
finalização, é que também lida com arquivos não compactados em subdiretórios:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Como 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
$
para ficar mais claro. E você não escapar do.
mesmo, então ele só vai para excluir arquivos que começam comgz
(uma vez que eles não têm "qualquer caractere antesgz
")