Que comando tar devo usar para obter arquivos alterados após uma determinada data - incluindo alterações de propriedade, permissões, etc. - mas excluindo arquivos que foram simplesmente restaurados do backup?
Por outro lado, seria preferível percorrer todos os arquivos após uma restauração e alterar o tempo de alteração de status de cada um como parte da restauração?
Eu tenho usado um comando semelhante ao seguinte para tar todos os arquivos modificados recentemente desde uma determinada data para um backup periódico do pobre homem:
$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -
Este não é o comando real, mas ilustra o ponto que estou tentando enfatizar. Este comando simplesmente despeja a lista de arquivos que deveriam ir para o arquivo tar se eu estivesse enviando a saída para um arquivo tar.
Até agora, pensei que este comando estava funcionando bem até substituir meu disco rígido e restaurar todos os arquivos do backup. Olhando para a saída de stat
, parece que a data de alteração é a data em que restaurei todos os arquivos do backup, então agora todos os arquivos estão sendo selecionados no meu comando tar acima.
$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500
Mesmo --newer-mtime
não parece ajudar:
$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -
ATUALIZAÇÃO: também tentei o seguinte, e isso também não ajudou em nada, pois ainda selecionava mais arquivos do que eu queria:
$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -
Ao filtrar os diretórios:
Vejo que os arquivos que eu queria pegar estão realmente sendo pegos e nada mais.
Por alguma razão, o tar pega todos os diretórios sem levar em conta o carimbo de data/hora, mas acho que posso viver com isso, então o comando acima ainda está bom na maioria das vezes e é por isso que não vi nenhum problema com ele até restaurar meu backup.
Agora em relação à restauração, afirmei que isso define o atributo Alterar em cada arquivo restaurado; portanto,
--after-date
foi inútil, pois meu próximo backup acabou obtendo todos os arquivos.Para superar isso, pela primeira vez apenas após a restauração, mudei para usar
--newer-mtime
:Isso me permite obter todos os novos arquivos desde a restauração e pretendo usar o original
--after-date
novamente, começando com o próximo backup.Isso tem uma desvantagem, conforme descrito mais abaixo: se houver alguma alteração de permissão ou propriedade entre o momento em que restaurei os arquivos e meu primeiro backup, não estou captando isso e provavelmente nunca o farei, a menos que esses mesmos arquivos tenham suas permissões/propriedade alteradas novamente, e só obterei a atualização naquele momento e todos os meus backups até esse ponto serão restaurados com as permissões/propriedade erradas.
O manual GNU tar afirma o seguinte:
Não estou claro sobre o que "e assim por diante" significa, mas também estou perdendo isso.
Dado o que estou apoiando aqui, não estou preocupado com isso, então estou bem com isso desta vez; no entanto, nos casos em que me importei com isso, poderia jogar fora meus backups incrementais e começar tudo de novo com um novo backup completo ou poderia concluir meu processo de restauração com um backup incremental seguindo as etapas acima usando
--newer-mtime
imediatamente após a restauração . O último aconteceria antes que as pessoas começassem a usar os arquivos restaurados, então obtenho um bom backup incremental antes de voltar para--after-date
.