rsync ignora proprietário, grupo, hora e permissões

67

Quero saber como usar o rsync para sincronizar com pastas recursivas, mas só preciso atualizar os novos arquivos ou os arquivos atualizados (apenas o conteúdo, não o proprietário, o grupo ou o carimbo de data e hora) e quero excluir os arquivos que não existem na fonte .

alsanal
fonte

Respostas:

94

Eu acho que você pode usar as -no-opções para rsynca não copiar a propriedade ou permissões dos arquivos que você está sync'ing.

Trecho da página de manual do rsync

--no-OPTION
       You may turn off one or more implied options by prefixing the option 
       name with "no-".  Not all options may be pre‐fixed  with  a  "no-":  
       only options that are implied by other options (e.g. --no-D, 
       --no-perms) or have different defaults in various circumstances (e.g. 
       --no-whole-file, --no-blocking-io, --no-dirs).  You may specify 
       either the short or the long option name after the "no-" prefix (e.g. 
       --no-R is the same as --no-relative).

       For example: if you want to use -a (--archive) but don’t want -o 
       (--owner), instead of converting -a into -rlptgD, you could specify 
       -a --no-o (or -a --no-owner).

       The order of the options is important:  if you specify --no-r -a, the 
       -r option would end up being turned on,  the opposite  of  -a  
       --no-r.   Note  also  that the side-effects of the --files-from 
       option are NOT positional, as it affects the default state of several 
       options and slightly changes the meaning of -a (see the  --files-from
       option for more details).

Propriedade e permissões

Olhando através da página de manual, acredito que você desejaria usar algo como isto:

$ rsync -avz --no-perms --no-owner --no-group ...

Para excluir arquivos que não existem, você pode usar a --deleteopção:

$ rsync -avz --no-perms --no-owner --no-group --delete ....

Timestamps

Quanto ao carimbo de data / hora, não vejo uma maneira de manter isso sem alterar a forma como você faria a comparação de arquivos SOURCE vs. DEST. Você pode querer dizer rsyncpara ignorar os carimbos de data / hora usando esta opção:

-I, --ignore-times
       Normally  rsync will skip any files that are already the same size 
       and have the same modification timestamp.  This option turns off this 
       "quick check" behavior, causing all files to be updated.

Atualizar

Para registros de data e hora, --no-timesfaça o que você está procurando.

slm
fonte
ao usar --no-times, ainda estou vendo muitos arquivos (com alterações detalhadas) marcados usando, o >f..T...que sugere que as faixas de arquivo e o tempo de modificação estão sendo definidos no destino, e é isso que estou tentando evitar.
Michael
17

Eu acho que é mais fácil evitar a opção -a

$ -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

e defina apenas as opções desejadas.

Se você gosta de todas as opções, mas não as modificações do usuário -o , group -g , time -t e Permissions -p , você pode subtrair essas quatro opções do equivalente ao arquivo.

$ -rlD

Para excluir os arquivos no destino, use a opção --delete .

Para sua pergunta: Mas acho que todos os arquivos serão verificados - o rsync não pode transferir / verificar apenas arquivos que foram alterados apenas pelo conteúdo.

UsersUser
fonte
-lé para links, -Ddispositivos (tratados da mesma forma que --specials), acho que -rsó basta se estamos falando de conteúdo.
Sdkks
7

Eu acho que o que você está procurando é a opção

rsync -r --size-only

na página do manual:

--size-only
   This  modifies  rsync’s  "quick  check"  algorithm  for finding files that need to be transferred,
   changing it from the default of transferring files  with  either  a  changed  size  or  a  changed
   last-modified  time  to  just  looking  for  files that have changed in size.  This is useful when
   starting to use rsync after using another mirroring  system  which  may  not  preserve  timestamps
   exactly.

Se você realmente deseja excluir arquivos ausentes no diretório de origem, use --delete

rubo77
fonte
4

Você pode forçar o rsync a ignorar as verificações com base no tempo e tamanho do arquivo mod e usar uma abordagem baseada em chksum com a opção "-c".

-c, --checksum              skip based on checksum, not mod-time & size

Isso significa que ele precisa comparar o arquivo inteiro em partes (e transferir os metadados relevantes entre a origem e o destino para que isso aconteça), independentemente de a hora e o tamanho do arquivo corresponderem ou não, mas transferirá apenas as partes que diferem entre a origem e o destino.

O uso dessa opção em conjunto com as outras opções sugeridas por outras pessoas deve limitar o que é copiado (apenas copiar o que foi alterado) e tem o benefício de fazer uma verificação de consistência entre a origem e o destino, mas demora mais, dependendo da velocidade do seu link. ele precisa agrupar os blocos de arquivos dos dois lados e comparar).

Anthony DFH
fonte
Duvido que seja o que OP tinha em mente. O problema não parecia estar relacionado à maneira como os arquivos foram selecionados, mas os atributos foram copiados e a resposta escolhida (também com mais votos) já cobre isso.
Julie Pelletier
-3

O comando abaixo funcionaria perfeitamente, eu testei para o meu próprio requisito, será necessário apenas a alteração do conteúdo.

rsync -acvzh source/ destination/
Charles J
fonte