web-dev-qa-db-fra.com

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

Je peux réussir à RSYNC sur SSH tant que les chemins ne contiennent pas d'espaces.

Lorsque le chemin contient 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 la saisie de mon mot de passe

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

Que puis-je faire?

Je vous remercie.

15
AndrewMRiv

En développant la réponse de rzr avec un exemple de code et de références, ajoutez simplement l'indicateur -s, citez les chemins et ne craignez pas l'échappement d'espaces 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 (no -H, -A, -X)
    • Comprend:
    • -r, --recursive, recurse dans des répertoires
    • -l, --links, copie les liens symboliques en tant que liens symboliques
    • -p, --perms, conserve les autorisations
    • -t, --times, conserve les temps de modification
    • -g, --group, conserve le groupe
    • -o, --owner, préservation du propriétaire (super-utilisateur uniquement)
    • -devices, conserve les fichiers du périphérique (super-utilisateur uniquement)
    • -specials, conservez des fichiers spéciaux
  • -v, --verbose, augmente la verbosité
  • -z, --compress, compresse les données du fichier pendant le transfert

Le paramètre supplémentaire nécessaire:

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

Vous devez échapper à des espaces dans les shell locaux et les shell distants. Essaye ça:

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

Le code source /path with spaces/ dans le shell local peut être échappé uniquement en y mettant des guillemets simples, c.-à-d. '/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 un caractère d'échappement (\) devant les espaces.

13
heemayl

examinez l'option rsync –protect-args (-s), aucune autre barre oblique n'est nécessaire

1
rzr