Estou usando cp -ruv sourcedir/ /mnt/destinationdir
para manter facilmente um backup de uma árvore de arquivos.
Ocasionalmente, este comando me diz:
remove '/mnt/destinationdir/path/file'
Estou surpreso, pois man cp
diz:
--update[=UPDATE]
control which existing files are updated;
UPDATE={all,none,none-fail,older(default)}.
-u equivalent to --update[=older]. See below
UPDATE controls which existing files in the destination are
replaced. 'all' is the default operation when an --update option
is not specified, and results in all existing files in the
destination being replaced. 'none' is like the --no-clobber
option, in that no files in the destination are replaced, and
skipped files do not induce a failure. 'none-fail' also ensures
no files are replaced in the destination, but any skipped files
are diagnosed and induce a failure. 'older' is the default
operation when --update is specified, and results in files being
replaced if they're older than the corresponding source file.
Quando cp --update=older
um arquivo será removido do diretório de destino?
EDIT: O trecho acima man cp
é para o coreutils 9.5. Na verdade, estou usando o 9.1, que tem menos controles de atualização, mas, pela página do manual, não acho que ele deva se comportar de forma diferente.
Sim,
--update
mantém o destino sincronizado com a origem, não é uma opção de backup.older
significa que o sinalizador primário que o processo verifica para ver se um objeto foi alterado é a data. Se a data de criação/modificação do objeto de origem for mais recente (a do destino for mais antiga), o objeto de destino será substituído.Manter um destino sincronizado com uma origem significa que objetos que foram removidos ou alterados na origem serão removidos ou alterados no destino. Um backup retém objetos que foram removidos na origem, E retém versões anteriores de objetos que foram alterados na origem.
O propósito da sincronização é manter duas (ou mais) cópias utilizáveis dos arquivos. É mais sobre redundância ou resiliência do que backup.