Localizar e comando rm não obedecendo à lista de exclusões ocasionalmente

3

Estou executando uma lista de diretórios find e rm -rf modificada antes de 7 dias com uma lista de exclusão de diretórios que não deve ser excluída em nenhum caso.

Este é o trecho do script

find [path-to-base-dir] -maxdepth 1 -type d ! -name [dir1] ! -name .snapshot \
! -name . ! -name [dir2] ! -name [dir3] ! -name [dir4] ! -name [dir5] ! -name [dir6] \
! -name [dir7] ! -name [dir8] ! -name [dir9] ! -name [dir10] ! -name [dir11] ! -name [dir12]\
 -mtime +7 -exec rm -rf {} \; -print

Isso está agendado como um cron diário. Na maioria dos dias, isso funciona bem ... Mas em alguns dias ele ignora a lista de exclusão e apaga todos os diretórios. Como isso pode acontecer? A lista de condições é muito longa, então qualquer tipo de latência pode levar a encontrar o comando ignorando as condições do nome ..?

    
por Vinod V 10.02.2015 / 09:43

2 respostas

2

find path-to-base-dir -maxdepth 1 \
     -type d ! -name bunch-of-exceptions \
     -mtime +7 -exec rm -rf {} \; -print

Você não incluiu path-to-base-dir no bunch-of-exceptions . (Você incluiu . , mas isso corresponderia apenas se path-to-base-dir fosse exatamente . ) A única condição de que o diretório path-to-base-dir possa falhar se -mtime +7 . Se o diretório não tiver sido modificado nos últimos 7 dias, ele será excluído.

Como seu find tem -mindepth e -maxdepth , use -mindepth 1 para excluir o diretório inicial.

    
por 10.02.2015 / 23:26
0

Coloque as strings [dir1] entre aspas, caso contrário o shell tentará expandi-las por causa dos colchetes, que podem ou não ter sucesso de acordo com o conteúdo do diretório de trabalho atual.

    
por 10.02.2015 / 10:17