Rsync sur le chemin SSH avec des espaces ne fonctionne pas avec les guillemets


17

Je peux réussir RSYNC sur SSH tant que les chemins n'ont pas d'espaces en eux.

Lorsque le chemin a des espaces, cela ne fonctionne pas. J'ai essayé des barres obliques, des guillemets et des guillemets doubles.

Lorsque j'utilise des barres obliques, la sortie indique que c'est un succès mais je ne vois aucun fichier transféré.

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

Lorsque j'utilise des guillemets simples ou doubles, cela me dit que l'autorisation est refusée après avoir entré mon mot de passe

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Que puis-je faire?

Je vous remercie.

Réponses:


12

En développant la réponse de rzr avec un exemple de code et des références, ajoutez simplement l' -sindicateur, citez les chemins et ne vous inquiétez pas des espaces qui s'échappent dans le chemin distant:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Pour référence, les options spécifiées par l'OP:

  • -a, mode archive, est égal à -rlptgoD (non -H, -A, -X)
    • Comprend:
    • -r, --recursive, recurse dans les répertoires
    • -l, --links, copie les liens symboliques en tant que liens symboliques
    • -p, --perms, conserve les autorisations
    • -t, --times, conserver les temps de modification
    • -g, --group, conserver le groupe
    • -o, --owner, conserve le propriétaire (super-utilisateur uniquement)
    • -devices, conserver les fichiers de l'appareil (super-utilisateur uniquement)
    • -spéciaux, conserver les fichiers spéciaux
  • -v, --verbose, augmenter la verbosité
  • -z, --compresser, compresser les données du fichier pendant le transfert

Le paramètre supplémentaire nécessaire:

  • -s, --protect-args, pas de séparation d'espace, caractères génériques uniquement

13

Vous devez échapper aux espaces dans le shell local et le shell distant. Essaye ça:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

La source, /path with spaces/dans le shell local, ne peut être échappée qu'en mettant des guillemets simples autour d'elle, c'est-à-dire '/path with spaces/'.

En revanche, dans le cas de la destination, le shell local est échappé en mettant des guillemets simples et les espaces sont échappés dans le shell distant en utilisant le caractère d'échappement ( \) devant les espaces.


3
Juste pour souligner - vous avez besoin des DEUX guillemets et des barres obliques inverses.
Sridhar Sarnobat

2

regardez l'option rsync –protect-args (-s), aucune barre oblique supplémentaire nécessaire


1
Votre réponse serait bien meilleure si vous fournissiez un exemple que l'utilisateur novice pourrait suivre. Je vous remercie!
Elder Geek
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.