rsync: Por que o --archive não implica --recursivo quando --files-from = FILE é usado?

0

Usar -r ou --recursive faz com que rsync seja redirecionado para diretórios. -a ou --archive é igual a -rlptgoD , então -a implica -r .

Se eu tenho diretórios source/ e dest/ e eu corro:

rsync source dest

, em seguida, rsync ignora source/ e não copia nada. Se eu correr:

rsync -a source dest

então -a implica -r e rsync copies source/ e todo o seu conteúdo em dest/ .

Mas se eu tiver um arquivo list.txt que contenha a linha source e o caminho completo do meu diretório source/ for /home/user/source/ e eu executar:

rsync -a --files-from=list.txt /home/user/ dest

, em seguida, rsync copia apenas source/ para dest/ , mas não copia seu conteúdo. O mesmo acontece se eu executar o comando sem a opção -a .

Mas se eu executar o mesmo comando com -r :

rsync -r --files-from=list.txt /home/user/ dest

depois, rsync copia source/ e todo o seu conteúdo para dest/ .

Minhas perguntas são:

  • Por que -a implica -r quando a opção --files-from=FILE é usada? Esse comportamento é esperado?
  • Dado que o comando rsync source dest ignora source/ e copia nada porque source/ é um diretório e nem -a nem -r é usado, por que o comando rsync --files-from=list.txt /home/user/ dest ainda copia source/ to dest/ ?
  • As outras opções implícitas por -a ainda funcionam quando a opção --files-from=FILE é usada? A -r é a única opção que é omitida?

Editar: parece que eu deveria ter lido a página man mais detalhadamente. Sob a descrição da opção --files-from=FILE , diz:

The --archive (-a) option’s behavior does not imply --recursive (-r), so specify it explicitly, if you want it.

(responde minha primeira pergunta.)

The --dirs (-d) option is implied, which will create directories specified in the list on the destination rather than noisily skipping them (use --no-dirs or --no-d if you want to turn that off).

(responde minha segunda pergunta.)

    
por jab 12.10.2017 / 09:14

1 resposta

3

-a, --archive

This is equivalent to -rlptgoD. It is a quick way of saying you want recursion and want to preserve almost everything (with -H being a notable omission). The only exception to the above equivalence is when --files-from is specified, in which case -r is not implied.

Quando você usa --files-from , a recursão é desabilitada (essa é a única opção deixada de fora). Supõe-se que o usuário saiba exatamente quais arquivos específicos transferir e que eles especificaram na lista de arquivos que eles usam com --files-from .

Se um diretório for especificado na lista de arquivos, a propriedade, o registro de data e hora, etc., serão sincronizados, mas não o conteúdo.

Você pode adicionar o sinal -r explicitamente:

rsync -av --files-from=file.list -r src/ dst/

Isso terá o efeito que você está procurando.

    
por 12.10.2017 / 09:24