Veja apenas as alterações ao executar o rsync

2

Estou usando o rsync para fazer backup dos arquivos do mac para o disco rígido externo. Por exemplo:

rsync -av --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

Antes de eu fazer isso, eu corro o mesmo comando no dry-run, adicionando -n option:

rsync -avn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

Pelo que entendi, eu deveria ver apenas a diferença que será copiada / alterada, mas por alguma razão todas as pastas e arquivos estão sendo impressos. Embora se eu testar o mesmo comando localmente com duas pastas, só vejo a diferença que mudou. Por que é assim e como posso consertar isso?

Atualizado:

Depois de adicionar a opção -i (graças à resposta do aluno), pude identificar por que todos os arquivos estão sendo listados. Parece que as permissões não estão sendo copiadas. Todas as pastas (e arquivos) têm isto:

.d...p... my folder/

Eu adicionei a opção -p (e -o , -g ) que deve copiar as permissões, mas ainda assim não teve sorte. Alguma ideia?

    
por sash 31.01.2017 / 10:42

3 respostas

2

Como Thomas apontou, o problema está relacionado ao formato dos discos rígidos (a solução proposta --chmod não funcionou para mim). Meu disco rígido externo é ExFAT e o disco rígido do Mac é Mac OS Extended . Então eu pesquisei e encontrei a solução aqui > >

a: archive, replaces the rlptgoD switches (recurse dirs, preserve symlinks, preserve permissions, preserves modification times, preserve groups, preserve owner and preserve Device files).

The problem is that the Linux exFAT does not cope well with the switches that relate to permissions (the pgo), so the solution is to run rsync with the following switches, removing the p, g and o:

Então a resposta para minha pergunta é:

rsync -rltDvn --delete ~/Pictures/ "/Volumes/My Passport/Mac Backups/Pictures"

Agora só consigo ver os arquivos alterados. Obrigado a todos pela ajuda.

    
por 01.02.2017 / 13:16
4

Existe a opção -i para o rsync, que representa --itemize-changes . Manual para rsync está dizendo que ele irá "produzir um resumo de alterações para todas as atualizações" .

Ele mostrará quais arquivos e diretórios foram alterados e, portanto, transferidos para o diretório de destino do diretório de origem. Ele também mostrará por que o rsync assumiu que o arquivo foi alterado, por exemplo, se o tamanho do arquivo de origem for diferente do arquivo de destino ou se o timestamp for diferente, ou talvez apenas permissões.

Aqui está um exemplo. Eu criei directory1 e directory2 . Ambos contêm o arquivo chamado textfile e ambos os arquivos têm apenas a letra "A" dentro. Mas o arquivo no diretório1 possui um registro de data e hora diferente. Então, executar rsync -ahzi directory1/ directory2/ me dá:

.d..t...... ./
>f..t...... textfile

> significa que o arquivo foi transferido para o destino local porque era diferente (se você rsync arquivos para 192.168.1.100:/some/directory por exemplo, você veria < , porque, em seguida, seria um destino remoto). f significa "arquivo" e t significa que o registro de data e hora desse arquivo foi diferente.

Agora, e se o conteúdo do arquivo também tiver sido alterado? Eu editei o textfile no diretório1, então ele contém as letras "AB". Então eu executei rsync -ahzi directory1/ directory2/ :

.d..t...... ./
>f.st...... textfile

> nos mostrando que os arquivos foram transferidos para o destino porque eram diferentes. Há s informando que o tamanho do arquivo era diferente e t nos dizendo que o registro de data e hora também era diferente.

Outros "flags" que você pode ver nessa saída incluem:

p - Permission are different
o - Owner is different
g - Group is different
a - The ACL information changed

Minha fonte na qual recebi explicações sobre todas essas sinalizações: link

    
por 31.01.2017 / 11:01
3

O provável problema é que a granularidade de registro de data e hora difere na unidade externa, e o rsync não está levando isso em conta. Você pode contornar isso usando a opção --modify-window :

--modify-window
When comparing two timestamps rsync treats the timestamps as being equal if they are within the value of modify_window. This is normally zero, but you might find it useful to set this to a larger value in some situations. In particular, when transferring to/from FAT filesystems which cannot represent times with a 1 second resolution this option is useful.

Refletindo a pergunta modificada: procure na página de manual do rsync para detalhes sobre os bits para --itemize-changes . Somente permissões são deixadas para endereço. A maioria das unidades externas fáceis de usar são vfat: Microsoft formatadas, suas permissões de arquivo Unix não correspondem (porque não há analogia para o grupo e outro permissões, e também porque a maioria dos aplicativos não se preocupam em tentar mapear a permissão de execução para corresponder ao Unix). Nesse caso, você não pode copiar as permissões. Você pode contornar isso usando a opção --chmod (fornecendo uma máscara que informa ao rsync que permissões ele pode esperar no destino):

--chmod
This option tells rsync to apply one or more comma-separated "chmod" strings to the permission of the files in the transfer. The resulting value is treated as though it was the permissions that the sending side supplied for the file, which means that this option can seem to have no effect on existing files if --perms is not enabled.

    
por 31.01.2017 / 11:32

Tags