Comprima pastas com mais de x dias

0

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

Gostaria de executar um script todos os domingos às 02:00 e compactar cada pasta com mais de 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 é compactá-los em um único arquivo. também não elimina as pastas originais.

Como devo proceder?

    
por john 03.07.2015 / 14:53

3 respostas

0

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

Tenha cuidado com os espaços.

    
por AlexAD 03.07.2015 / 15:14
0
find /path/to/directory -mtime +2 -exec ls "{}" \;

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

Você pode substituir 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 ao remover arquivos com uma determinada 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 cron job, cron é o agendador de scripts no Ubuntu (e em outros sistemas linux).

Isso deve começar com você!

    
por Arronical 03.07.2015 / 15:18
0

Esse comando único 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 de que isso não excluirá 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 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órios /opt/abc/<dirname>/<files> , que eu ainda não consegui resolver.

    
por s3lph 03.07.2015 / 15:52