rsync - saída somente de lista não esperada

2

A opção rsync --list-only aparece para dar uma saída que não está correta. Aqui estão meus arquivos de teste:

~/src$ ls
lrwxrwxrwx 1 michael michael 23 Sep  5 09:19 far_symlink -> /home/michael/Documents
-rw------- 1 michael michael  0 Sep  5 09:18 file
lrwxrwxrwx 1 michael michael  4 Sep  5 09:18 near_symlink -> file

Eu quero uma lista de arquivos que serão transferidos, e eu não quero links simbólicos, então eu corro isso com --list-only :

~/src$ rsync -r --no-links --list-only ./ ~/dest
drwx------          4,096 2018/09/05 09:19:05 .
lrwxrwxrwx             23 2018/09/05 09:19:05 far_symlink
-rw-------              0 2018/09/05 09:18:15 file
lrwxrwxrwx              4 2018/09/05 09:18:28 near_symlink

Indica que os links simbólicos serão transferidos, mas esse não é o caso. Se eu realmente fizer a transferência:

~/src$ ls ~/dest
drwx------  2 michael michael 4.0K 2018-09-05 09:39:16 .
drwxr-xr-x 30 michael michael 4.0K 2018-09-05 09:44:49 ..

~/src$ rsync -r --no-links ./ ~/dest
skipping non-regular file "far_symlink"
skipping non-regular file "near_symlink"

~/src$ ls ~/dest
drwxr-xr-x 30 michael michael 4.0K 2018-09-05 09:44:49 ..
-rw-------  1 michael michael    0 2018-09-05 09:48:10 file
drwx------  2 michael michael 4.0K 2018-09-05 09:48:10 .

Os links simbólicos não são enviados.

Portanto, parece que --list-only não está sendo verdadeiro. Existe alguma maneira de obter uma lista (sem ter que entrar em contato com, por exemplo, um servidor ssh remoto) quanto a quais arquivos devem ser realmente transferidos? O que estou perdendo?

Estou no Ubuntu 18.04. Outros detalhes:

$ uname -a
Linux ubuntu 4.15.0-33-generic #36-Ubuntu SMP Wed Aug 15 16:00:05 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ rsync --version
rsync  version 3.1.2  protocol version 31
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes, prealloc

ATUALIZAÇÃO: Por favor, desculpe minha pobre terminologia. Eu entendo a diferença entre o que é um candidato para transferir vs. o que será transferido. Minha pergunta é por que os links simbólicos são considerados candidatos para serem transferidos (e, portanto, listados por --list-only ) quando obviamente não serão transferidos independentemente da condição do destino e eles são (eu pensei) explicitamente excluído por no-links .

    
por Michael 05.09.2018 / 17:10

1 resposta

1

A opção --list-only não identifica os arquivos que serão transferidos; ele apenas identifica os arquivos candidatos para serem transferidos. Você pode ver isso aqui

touch aa bb cc; ln -s cc dd
rsync --list-only --no-links -a ?? /tmp
rsync -av ?? /tmp

rsync --list-only --no-links -a ?? /tmp

Saída do último rsync

-rw-r--r--              0 2018/09/05 16:35:01 aa
-rw-r--r--              0 2018/09/05 16:35:01 bb
-rw-r--r--              0 2018/09/05 16:35:01 cc
lrwxrwxrwx              2 2018/09/05 16:35:01 dd -> cc

Considere o último rsync , em que os arquivos já foram transferidos e permanecem inalterados na origem. Se --list-only mostrasse arquivos que precisavam ser transferidos, nada seria listado. No entanto, ele ainda mostra o conjunto de arquivos de origem que precisam ser considerados.

Se você quiser usar o contexto do destino para gerenciar o conjunto de arquivos a ser informado, use --dry-run --info=name

rsync --dry-run --info=name --archive --no-links ?? /tmp

Ou, se você quiser uma saída similar àquela produzida por --list-only (notavelmente omitindo o tipo de entrada do primeiro caractere)

rsync --dry-run --info=name --out-format='%B%16l %t %f' --archive --no-links ?? /tmp

Saída inicial

skipping non-regular file "dd"
rw-r--r--               0 2018/09/05 16:42:30 aa
rw-r--r--               0 2018/09/05 16:42:30 bb
rw-r--r--               0 2018/09/05 16:42:30 cc

Saída subsequente, uma vez que os arquivos foram copiados

skipping non-regular file "dd"
    
por 05.09.2018 / 17:47

Tags