rsync n'utilise pas l'option --files-from?

13

Je suis en train de courir rsync -a --files-from=~/.rsync_file_list ~/destinationet il me dit: rsync error: syntax or usage error (code 1) at options.c(1652) [client=3.0.7]. Quelqu'un peut-il m'éclairer sur ce que je fais mal?

Le fichier ~/.rsync_file_listcontient juste une liste de noms de fichiers précédés de ~/, séparés par des retours à la ligne (même si j'ai également essayé de tous les répertorier sur la même ligne, avec le même résultat).

Si je cours, rsync -a ~/file ~/file2 ~/file3 ~/destinationcela fonctionne très bien. Alors qu'est-ce qui me manque dans l' --files-fromoption?

Loup
la source
essayersed "s#~/#/home/wolf/#g" -ie ~/.rsync_file_list
Andy
@Andy: Hélas, même résultat.
Wolf

Réponses:

20

D'accord, j'ai trouvé le problème.

  1. Le fichier contenant les noms de fichiers ne doit contenir que des noms de fichiers; aucun chemin, relatif ou autre;
  2. Après avoir spécifié --files-from=FILE, rsync nécessite un répertoire source dans lequel trouver les fichiers répertoriés.

La commande devrait donc l'être rsync -a --files-from=~/.rsync_file_list $HOME/ /destination.

.rsync_file_list Devrais lire:

file 1
file 2
file 3
Loup
la source
3
Correction: Les noms de fichiers dans le fichier donné SONT relatifs au répertoire source, mais ne peuvent pas être au-dessus (non ../). Les barres obliques principales seront ignorées, donc les chemins absolus ne fonctionneront pas.
Wolf
Je pense que vous pouvez modifier votre propre réponse et ajouter ce très bel ajout et des informations pertinentes que vous avez découvert plus tard dans la réponse elle-même.
Vinícius M
0

L'utilisation de "~" peut ne pas fonctionner à l'intérieur d'un fichier "à partir de" à moins que rsync soit suffisamment intelligent pour reconnaître et traduire le symbole "~".

Lorsque vous spécifiez un "~" dans le cadre d'une commande dans la ligne de commande de votre shell, c'est le shell lui-même qui convertit "~" dans votre répertoire personnel avant de passer l'argument au programme. Ainsi, même si vous tapez rsync -a ~/file, ce qui rsync"voit" est en fait le chemin résolu, ou rsync -a /home/foo/file.

Voir Expansion Bash Tilde pour plus d'informations.

douze17
la source