Houskeep arquivos antigos e dirs

1

Estou com um pouco de dificuldade, estou tentando fazer um script que criará uma lista de arquivos e diretórios com mais de 7 dias e excluirá os que não estiverem na lista tokeep.list. Meu primeiro problema é que se eu coloco um dir na lista de nodelete, mas este dir tem arquivos antigos dentro, os arquivos não foram deletados, até agora a única solução que eu consegui fazer, é executar um comando para diretórios e outros arquivos, é muito feio, não sou desenvolvedor.

LogFile=/users/nordic/housekeep.log
source config.cfg
exec &> >(tee $LogFile)

echo "Starting Housekeep files at $host $timestamp"

echo "Creating list of directories to delete"

cd $dir

find $dir/* -maxdepth 1 -type d -mtime +$days > /users/nordic/todelete

if [ $? -eq 0 ]; then
    echo OK
else
    echo FAIL
fi

echo "deleting  directories to listed on todelete file"

dels='cat  /users/nordic/todelete'
readarray -t keeps <  /users/nordic/tokeep

for keep in "${keeps[@]}"; do
    dels='echo "$dels" | grep -v "$keep"'
done

echo "$dels" > /users/nordic/todelete

readarray -t dels < /users/nordic/todelete; for del in "${dels[@]}"; do rm -rv "$del"; done

result=$?
if [ $result -eq 0 ]; then
    echo SUCCESS |tee /users/nordic/res
else
    echo FAILED |tee /users/nordic/res
fi

find $dir/* -maxdepth 1 -type f -mtime +$days -print -delete

#SUBJECT="Automated Housekeep $host $resu"
#TO="[email protected]"
#MESSAGE="$LogFile"

#mailx -s "$SUBJECT" -r "info<[email protected]>" $TO < $MESSAGE

Eu tenho um arquivo config.cfg com as variáveis, o que estou tentando fazer é criar uma lista de arquivos e nomes de diretórios para manter e excluir o resto. qualquer sugestão é bem vinda.

    
por Luiz Spies 05.07.2017 / 11:25

2 respostas

0
cd "$dir" && \
find . -type d ! -name . -mtime +"$days" \
  ! -exec sh -c 'printf %s\n "${1/./$PWD}" | grep -qFf /users/nordic/tokeep' {} {} \; \
  -print0 -prune -o -type f -mtime +"$days" -delete |\
xargs -r0 rm -r

Trabalhando

  • Após um cd bem sucedido na dir. cujo nome está armazenado em $dir we
  • Inicie o comando find , que faz malabarismos entre os seguintes:
    • Por directory :
      • Não é o diretório atual e tem mais de $ dias, em seguida, envia seu nome para o xargs do outro lado do canal, desde que não seja encontrado no arquivo de tokeep. Também não entre neste diretório desde que ele tenha sido marcado para liberação.
    • OTW, para um file , exclua-os se tiverem mais de $ dias.
  • O xargs será passado nos antigos diretórios que serão excluídos.
por 05.07.2017 / 14:18
0

Sugiro criar uma lista de arquivos para excluir, não para manter.

E inicie a remoção de dir / ou arquivos para baixo em arquivos de árvore, explicarei melhor:

remover nesta ordem:

/dir1/dir2/file2
/dir1/dir2
/dir1/file1
/dir1
    
por 05.07.2017 / 12:03