LC_ALL=C find . ! -name '*.gz' \
-type f \
-size +"$((500*1024*1024))c" \
-mtime +0 \
-exec gzip {} +
Aqui, usando gzip para compactação. Veja também xz , bzip2 ou compress para outros utilitários de compactação com diferentes formatos de compactação.
Observe que algumas implementações find , como o GNU find , também suportam -size +500M .
Você pode adicionar a opção -v a gzip para obter algumas informações sobre o progresso.
Se os doisfile e file.gz existirem, você receberá um aviso de confirmação. Adicione a opção -f se você quiser forçar a compactação ou adicione < /dev/null se não quiser que a file.gz seja substituída e não queira responder a uma solicitação.
Observe que -mtime +0 verifica se a idade no número inteiro de dias arredondados para baixo é maior que 0, portanto, será válida para arquivos com idade de um dia ou mais, enquanto -size +500M verifica se o tamanho em número inteiro de mebibytes arredondados para cima for maior que 500 , então será verdadeiro para arquivos cujo tamanho é estritamente maior que 500M (524288000 bytes). / p>
O LC_ALL=C é garantir que *.gz corresponda a arquivos cujo nome termina em .gz , independentemente de o início do nome do arquivo conter caracteres válidos no código do idioma atual ou não. Isso tem o efeito de tamanho de afetar a linguagem das mensagens de erro.
Se você quiser verificar o que faria sem realmente fazer isso, substitua gzip por echo gzip .