Script de shell do Linux: exclua todos os arquivos sem “01” no nome

1

Eu tenho um script de backup que cria arquivos nomeados para o dia da criação no formato backups_YYYYMMDD.tar.gz

Eu atualmente limpo tudo com mais de 30 dias com um comando como este:

find /backups -mtime +30 -name "backups_????????.tar.gz" -delete

Como posso alterar isso para limpar apenas arquivos que NÃO foram criados no primeiro dia do mês? ou seja, qualquer coisa que corresponda a "backups _ ?????? 01.tar.gz" permanece.

    
por DrStalker 20.08.2010 / 02:41

2 respostas

2

Você pode fazer isso com simples globbing da mesma maneira que você está usando agora:

find /backups -mtime +30 -name "backups_????????.tar.gz" ! -name "backups_??????01.tar.gz" -delete

"Encontre os arquivos com mais de 30 dias e sejam chamados de FOO e não denominados BAR e exclua-os."

    
por 20.08.2010 / 03:11
0

Supondo que você tenha anotado, mas arquivos de backup em todos os diretórios abaixo, você poderia fazer algo como:

find . -type f -regextype posix-egrep ! -regex ".*backups_[0-9]{6}01.tar.gz" -name '*.tar.gz' -print0 | xargs -0 rm 

Difícil dizer exatamente sem conhecer todos os arquivos nesses diretórios, então execute-os sem rm primeiro! Você pode querer modificar o último * .tar.gz glob para algo mais próximo do seu glob original.

    
por 20.08.2010 / 03:00