Linha de fundo:
-
Uma cópia (o comando cp
) faz um trabalho diferente do rsync. Por um lado, não copia os timestamps.
-
A rsync
option --update
atualizará apenas os arquivos mais recentes.
Supondo que o que você fez foi uma cópia dos diretórios, em específico, isso:
#!/bin/bash
mkdir -p test/testDir2
mkdir -p test/testDir1/testDir11
echo "yes3" > test/testDir1/testDir11/testFile3.txt
echo "yes2" > test/testDir1/testFile2.txt
echo "yes1" > test/testFile1.txt
sleep 3
cp -r test/ testcopy/
Isso criará dois diretórios com estrutura semelhante:
$ tree test
test
├── testDir1
│ ├── testDir11
│ │ └── testFile3.txt
│ └── testFile2.txt
├── testDir2
└── testFile1.txt
E a cópia:
$ tree testCopy/
testCopy/
├── testDir1
│ ├── testDir11
│ │ └── testFile3.txt
│ └── testFile2.txt
├── testDir2
└── testFile1.txt
Os diretórios parecem iguais, mas não são.
O sleep 3
antes do cp
fará todos os arquivos em testCopy
com tempos diferentes:
$ ls -la --time-style=full-iso test/testFile1.txt
-rw-r--r-- 1 user user 5 2017-06-22 20:22:13.704512555 0000 test/testFile1.txt
$ ls -la --time-style=full-iso testCopy/testFile1.txt
-rw-r--r-- 1 user user 5 2017-06-22 20:22:16.716355225 0000 testCopy/testFile1.txt
Em seguida, testar o rsync com as opções que você afirmou (nada será alterado) mostrará isso:
$ rsync -n --update -va test/ testCopy/
sending incremental file list
./
testDir1/
testDir1/testDir11/
testDir2/
Por que isso acontece?
Porque a opção --update
tem precedência e só sincronizará novos arquivos. Os arquivos na cópia são mais recentes que os originais.
Se tocarmos em um arquivo no diretório original, ele será incluído:
$ touch test/testFile1.txt
$ rsync -n --update -va test/ testCopy/
sending incremental file list
./
testFile1.txt
testDir1/
testDir1/testDir11/
testDir2/
O que fará uma sincronização completa (mais antiga ou mais recente, mas diferente):
$ rsync -n -va test/ testCopy/
sending incremental file list
./
testFile1.txt
testDir1/
testDir1/testFile2.txt
testDir1/testDir11/
testDir1/testDir11/testFile3.txt
testDir2/
Se isso for permitido para executar a sincronização (remova a opção -n
) e execute novamente:
$ rsync -n -va test/ testCopy/
sending incremental file list
Nada precisa ser trocado quando tudo foi atualizado.
Se um arquivo for alterado (torná-lo mais recente), ele será atualizado:
$ touch test/testDir1/testFile2.txt
$ rsync -n --update -va test/ testCopy/
sending incremental file list
testDir1/testFile2.txt
Mas depois de uma sincronização real, se o arquivo feito mais recente for o da cópia. ele não precisará ser trocado (já é mais recente).
$ touch testCopy/testDir1/testFile2.txt
$ rsync -n --update -va test/ testCopy/
sending incremental file list