rsync não está usando a opção --files-from?

13

Eu estou tentando executar rsync -a --files-from=~/.rsync_file_list ~/destinatione ele me diz: rsync error: syntax or usage error (code 1) at options.c(1652) [client=3.0.7]. Alguém pode me esclarecer o que estou fazendo de errado?

O arquivo ~/.rsync_file_listcontém apenas uma lista de nomes de arquivos precedidos por ~/, separados por novas linhas (embora eu também tenha tentado listá-los todos na mesma linha, com o mesmo resultado).

Se eu executar rsync -a ~/file ~/file2 ~/file3 ~/destination, funciona muito bem. Então, o que estou perdendo na --files-fromopção?

Lobo
fonte
tente #sed "s#~/#/home/wolf/#g" -ie ~/.rsync_file_list
12/04 Andy
@ Andy: Infelizmente, mesmo resultado.
Lobo12 /

Respostas:

20

Ok, eu encontrei o problema.

  1. O arquivo que contém nomes de arquivos deve conter apenas nomes de arquivos; nenhum caminho, relativo ou não;
  2. Depois de especificar --files-from=FILE, o rsync requer um diretório de origem no qual encontrar os arquivos listados.

Então o comando deve ser rsync -a --files-from=~/.rsync_file_list $HOME/ /destination.

.rsync_file_list deve ler:

file 1
file 2
file 3
Lobo
fonte
3
Correção: Os nomes de arquivos no arquivo especificado SÃO relativos ao diretório de origem, mas não podem estar acima dele (não ../). As barras principais serão ignoradas, para que caminhos absolutos não funcionem.
Lobo
Acredito que você pode editar sua própria resposta e adicionar essa adição muito legal e informações relevantes que você descobriu mais tarde na própria resposta.
Vinícius M
0

O uso do "~" pode não funcionar dentro de um arquivo "files-from", a menos que o rsync seja inteligente o suficiente para reconhecer e converter o símbolo "~".

Quando você especifica um "~" como parte de um comando na linha de comando do seu shell, é o próprio shell que converte "~" no diretório inicial antes de passar o argumento para o programa. Portanto, mesmo que você digite rsync -a ~/file, o que rsync"vê" é realmente o caminho resolvido ou rsync -a /home/foo/file.

Consulte Expansão do Bash Tilde para obter mais informações.

doze17
fonte