grep 'PATTERN' "$sourcefile" >compressedfile
if [ -s compressedfile ]; then
gzip -f compressedfile
else
rm -f compressedfile
fi
O teste -s
será verdadeiro se o nome de arquivo fornecido existir e se se referir a um arquivo cujo tamanho é maior que zero. O arquivo irá existir (um redirecionamento sempre criará o arquivo se ele ainda não existir) e o tamanho será maior que zero se houver algum resultado do grep
.
O sinal -f
to gzip
força a compactação, mesmo se o arquivo crescer (o que seria feito se fosse pequeno para começar).
A mesma coisa, quase (já que não comprimirá a saída grep
se algum tipo de erro de leitura / gravação ocorrer por grep
), mas usando o status de saída de grep
:
if grep 'PATTERN' "$sourcefile" >compressedfile; then
gzip -f compressedfile
else
rm -f compressedfile
fi
ou apenas
grep 'PATTERN' "$sourcefile" >compressedfile && gzip -f compressedfile
rm -f compressedfile
Aqui, rm
tentará remover o arquivo descompactado, mas como estamos usando rm -f
, nenhum erro será informado se o arquivo não existir (não existirá se gzip
tiver sido compactado isso.
No caso mais geral, aconselho não armazenar o resultado de grep
em uma variável, pois isso pode retornar gigabytes de dados (não sabemos disso).