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.

AndrewMRiv
la source

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
substrat binaire
la source
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.

heemayl
la source
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

rzr
la source
1
Votre réponse serait bien meilleure si vous fournissiez un exemple que l'utilisateur novice pourrait suivre. Je vous remercie!
Elder Geek