Comprimir pastas com mais de x dias

Em /opt/abc eu tenho um caminho onde uma nova pasta é criada diariamente. Nessa pasta, uma série de arquivos é criada.

Eu gostaria de executar um script todos os domingos às 02:00 e comprimir cada pasta que é mais antiga que 2 dias. Eu não gostaria de ter tudo compactado em uma pasta, mas cada pasta para compactar individualmente. Se a compactação for bem-sucedida, a pasta original poderá ser excluída.

Eu tentei criar um script, mas tudo o que ele faz é comprimi-los em um único arquivo. também não apaga as pastas originais.

Como devo proceder?

Você pode usar xargs -n 1 para canalizar apenas um argumento de arquivo único para o comando compress .

Tenha cuidado com espaços.

 find /path/to/directory -mtime +2 -exec ls "{}" \; 

É um snippet útil para listar arquivos com mais de 2 dias, apesar de contar apenas dias completos, e há um elemento de arredondamento que acontece lá, então usar minutos com a opção -mmin pode funcionar melhor. Eu também vi pessoas relé o -exec com print0 e canalizar a saída para xargs , lida com nomes de arquivos incomuns melhor do que o echo . Você pode especificar o tipo de arquivo que o find está procurando, para fazer com que ele só encontre diretórios, acho que essa é a opção -type

Você pode replace o ls no comando por outros comandos, geralmente uso ls para ter certeza de que estou satisfeito com a saída e, em seguida, substituo-o por mv /path/to/target quando estiver removendo arquivos com uma certa idade. Suponho que você poderia usar um comando tar no lugar do ls para obter a compactação desejada.

Você pode fazer o script e chamar o script como uma tarefa do cron , o cron é o agendador de scripts no Ubuntu (e em outros sistemas Linux).

Isso deve começar com você!

Este único comando deve fazer o trabalho, então ele pode simplesmente ser inserido no seu crontab:

 find /opt/abc/* -maxdepth 0 -mtime +2 ! -name '*.tar.gz' -exec tar czf {}.tar.gz {} \; -exec rm -rf {} \; 

Eu não testei tão bem, mas tenho certeza que não irá apagar acidentalmente as coisas.

No entanto, ele excluirá archives, se eles tiverem o mesmo nome que um diretório em questão antes do .tar.gz , pois o tar do GNU sobrescreverá, se a opção de criação, c , for fornecida. Será mais seguro se você arquivar em outro diretório:

 find /opt/abc/* -maxdepth 0 -mtime +2 ! -name '*.tar.gz' -exec tar czf /opt/abcompressed/{}.tar.gz {} \; -exec rm -rf {} \; 

Além disso, os arquivos conterão a estrutura de diretório /opt/abc// , que eu ainda não consegui resolver.