
Escrevi um script bash para fazer backup de pastas e arquivos de uma máquina para nosso servidor de backup. Meu objetivo é excluir todos os arquivos com mais de 6 meses deste backup semanal. Para fazer isso, usei um comando find para construir um arquivo txt que contém o caminho desses arquivos.
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/Exclusions.txt "%P\n"
E então usei a opção "--include-from" do rsync.
rsync . -e ssh -qrtl --exclude-from=$SCRIPT_DIR/Exclusions.txt $USER@$DEST_SRV:$DEST_DIR
O resultado foi que o backup funcionou, mas não a inclusão. Portanto, todos os arquivos foram copiados, mesmo aqueles com mais de 6 meses.
Como posso fazer isso?
desde já, obrigado
Responder1
De acordo com as páginas de manual,
--exclude=PATTERN exclude files matching PATTERN
--exclude-from=FILE read exclude patterns from FILE
--include=PATTERN don't exclude files matching PATTERN
--include-from=FILE read include patterns from FILE
A exclusão é feita de acordo com o padrão de leitura dos arquivos, e não de acordo com os nomes dos arquivos em si.
Concordo que incluir/excluir arquivos de acordo com os nomes também pode ser difícil, mas não é assim que funciona.
Você poderia tentar algo assim para incluir arquivos mais recentes que 1 semana atrás:
--files-from=<(find . -mtime -7 -print0)
Responder2
Ok, resolvi meu problema! A linha "find" permanece a mesma:
find . -type f -mtime -200 -fprintf $SCRIPT_DIR/includes.txt "%P\n"
E eu uso a opção "--files-from" em vez de "--exclude-from"
rsync . -e ssh -qrtl --files-from=$SCRIPT_DIR/includes.txt $USER@$DEST_SRV:$DEST_DIR