X

Buscar milhares de arquivos e remover a partir da lista

Dando continuidade ao post anterior onde buscamos milhares de arquivos e executamos um rsync para outro disco.

Neste post vamos ver como usar esta lista de arquivos e remover ou até mesmo enviar eles para o S3. Para facilitar a execução dividi esta tarefa em 3 partes.

Na primeira parte criamos a nossa lista com base no numero de dias informado na execução.

Script 01: copiarArquivos.sh 1700

#!/bin/bash
set -x
# Anexar um novo volume na instancia.
# ./copiarArquivos.sh 1500
export OPTIONS="--times --relative --compress --owner --group --recursive"
function error_check {
  if [[ $? != 0 ]]; then
    echo 'Erro no script!'
    exit 1
  fi
}
# Exemplo de busca com uso de regex para pegar todos os usuários:
# find /home/ -regextype sed -regex ".*/[a-z\|0-9\]\+/nome_do_diretorio/.*" -type f -mtime +$1 > lista-arquivos.txt
find /home/ -type f -mtime +$1 > lista-arquivos.txt
error_check

for arquivos in $(cat lista-arquivos.txt); do
    rsync $OPTIONS $arquivos /novo-disco/
    error_check
done
cp lista-arquivos.txt lista-`date +%Y-%m-%d-%H-%M`.txt

Explicando o script acima:

1 – Na variável OPTIONS temos os atributos que vamos usar no rsync para cada item dr arquivos.

2 – Logo abaixo temos uma função que caso a saída seja diferente de 0 (Zero) ou seja de erros ele interrompe a execução.

3 – Ja para o find deixei comentado uma opção caso deseja fazer a busca somente dentro de um diretório dos usuários. Logo abaixo dentro do for temos a execução do rsync para cada item da lista.

4 – E por ultimo criamos uma copia do arquivo de lista.


Nesta segunda parte do script já estamos com a lista de arquivos, vamos executar a remoção deles.

Script 02: removerArquivos.sh

#!/bin/bash
set -x
# ./removerArquivos.sh
function error_check {
  if [[ $? != 0 ]]; then
    echo 'Erro no script!'
    exit 1
  fi
}
for remove in $(cat lista-arquivos.txt); do 
    rm -f $remove 
    error_check 
done

Explicando o script acima:

1 – Usando a lista gerada anteriormente para cada linha da lista vamos executar o rm -f.


Na terceira e ultima parte do script podemos usar para enviar os arquivos ao AWS S3.

Script 03: enviarArquivosS3.sh

#!/bin/bash
set -x
# ./enviarArquivosS3.sh
export BUCKET_NAME='nome-bucket'
function error_check {
  if [[ $? != 0 ]]; then
    echo 'Erro no script!'
    exit 1
  fi
}
aws s3 mv /novo-disco/home/ s3://$BUCKET_NAME/ --recursive
error_check

Explicando o script acima:

1 – A variável BUCKET_NAME deve conter o nome do bucket la no AWS S3 lembrando que as credenciais de um usuário com acesso a este bucket deve estar configurado no arquivos /home/<usuario>/.aws/credentials

2 – O item aws s3 mv usamos para mover do disco de backup para o Bucket la na AWS.