rsync está falhando com mensagens de erro confusas

1

Em um script bash (Arch Linux) eu tenho o seguinte comando rsync:

rsync –nvaAHX --inplace --delete-delay --exclude-from="/etc/$path1/exclude-list-$configName.txt" "$new_snap/" "$BACKUPDIR"

O comando rsync falha com o seguinte erro:

rsync: --delete does not work without --recursive (-r) or --dirs (-d).

É claro que essa mensagem é enganosa, pois "a" implica "r".

Se eu remover a opção "--delete-delay" do comando rsync, recebo este erro diferente:

rsync: link_stat "/some/path/–aAHX" failed: No such file or directory (2)

O valor mostrado em "/ some / path" é o diretório de trabalho atual. Se eu alterar o diretório atual, esse valor na mensagem de erro também será alterado. No entanto, por que as opções "-aAHX" seriam anexadas a qualquer parte do caminho é confuso.

O computador é um sistema Arch Linux totalmente atualizado. Eu apenas reiniciei também.

4.13.11-1-ARCH #1 SMP PREEMPT Thu Nov 2 10:25:56 CET 2017 x86_64 GNU/Linux

localização do programa rsync:

# which rsync
/usr/bin/rsync

Aqui está o script de teste:

#!/bin/bash

path1=xyz
configName=root
new_snap=/.snapshots/1/snapshot
BACKUPDIR=/backup/$configName

echo "showing exclude file contents:"

cat "/etc/$path1/exclude-list-$configName.txt"

echo

echo rsync –nvaAHX --inplace --delete-delay --exclude-from="/etc/$path1/exclude-list-$configName.txt" "$new_snap/" "$BACKUPDIR"

rsync –nvaAHX --inplace --delete-delay --exclude-from="/etc/$path1/exclude-list-$configName.txt" "$new_snap/" "$BACKUPDIR"

Aqui está o conteúdo do arquivo "/etc/$path/exclude-list-$configName.txt":

"dev/*"
"proc/*"
"sys/*"
"tmp/*"
"run/*"
"mnt/*"
"media/*"
"lost+found"
".trash*/*"
".Trash*/*"

Aqui estão alguns testes sem nenhum script. Eu acho desconcertante.

# mkdir adir
# mkdir bdir
# touch adir/afile1
# touch adir/afile2

# ls -la adir/
total 0
drwxr-x--x 1 root root           24 Nov 12 02:21 .
drwxr-xr-x 1 user user         2080 Nov 12 02:28 ..
-rw-r----- 1 root root            0 Nov 12 02:21 afile1
-rw-r----- 1 root root            0 Nov 12 02:21 afile2
# ls -la bdir/
total 0
drwxr-x--x 1 root root            0 Nov 12 02:21 .
drwxr-xr-x 1 user user         2080 Nov 12 02:28 ..


# rsync -nva adir/ bdir
sending incremental file list
./
afile1
afile2

sent 93 bytes  received 25 bytes  236.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

# rsync -nva /home/user/adir/ /home/user/bdir
sending incremental file list
./
afile1
afile2

sent 93 bytes  received 25 bytes  236.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)


# rsync –nvaAHX --inplace --delete-delay --exclude-from=/root/exclude-list-root.txt /home/user/adir/ /home/user/bdir/
rsync: --delete does not work without --recursive (-r) or --dirs (-d).
rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2]
# rsync –nvaAHX --inplace --delete-delay /home/user/adir/ /home/user/bdir/
rsync: --delete does not work without --recursive (-r) or --dirs (-d).
rsync error: syntax or usage error (code 1) at main.c(1567) [client=3.1.2]
# rsync –nvaAHX --inplace /home/user/adir/ /home/user/bdir/
rsync: link_stat "/home/user/–nvaAHX" failed: No such file or directory (2)
skipping directory .
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
# rsync –nvaAHX /home/user/adir/ /home/user/bdir/
rsync: link_stat "/home/user/–nvaAHX" failed: No such file or directory (2)
skipping directory .
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
# rsync –nva /home/user/adir/ /home/user/bdir/
rsync: link_stat "/home/user/–nva" failed: No such file or directory (2)
skipping directory .
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
    
por MountainX 12.11.2017 / 05:39

2 respostas

5

Esse traço na frente de n em –nvaHAX não é um traço comum, mas um traço ligeiramente menor (ou hífen).

Isso pode ter acontecido se você copia e cola de um editor ou processador de texto "inteligente" que substitui certos caracteres pelo caractere tipográfico correspondente.

No meu sistema, copiar e colar a primeira parte do seu comando resulta em:

$ rsync –nva adir/ bdir/              
rsync: link_stat "/tmp_mfs/shell-ksh.D1Mq1Xht/\#342\#200\#223nva" failed: No such file or directory (2)
skipping directory .
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]

Como você pode ver, meu terminal exibe a mensagem de erro um pouco diferente do seu e mostra que o traço é na verdade um caractere Unicode (ou algo similar, eu não sei muito sobre codificações de caracteres).

    
por 12.11.2017 / 09:03
1

O problema todo estranho foi causado pelo personagem na frente das opções de rsync. O personagem problemático é esse (e eu não sei como ele chegou lá):

–
# printf – | od -An -vtu1
226 128 147

O caractere adequado é esse caractere, um traço padrão (sinal de menos):

-
# printf - | od -An -vtu1
45
    
por 12.11.2017 / 09:13

Tags