J'essaye de rsync d'un serveur à l'autre. Les serveurs ont la même structure de répertoire, mais je ne parviens pas à faire en sorte que le serveur de télécommandes reconnaisse correctement le nom du chemin d'accès sur la télécommande lorsqu'il y a un espace.
Voici les détails
Le répertoire local est
mnt/xlses/split/v2/name with space
Le répertoire distant est
mnt/xlses/split/v2/name with space
J'ai essayé tout ce que je peux trouver la dernière tentative a été
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ [email protected]:/mnt/xlses/split/v2/"name with space"
quand cela fonctionne la première chose qu'il rapporte est qu'il crée un nouveau répertoire
Je l'interromps et vois qu'il y a un nouveau répertoire
mnt/xlses/split/v2/name
tous mes fichiers sont dans ce répertoire
Je m'attendais à ce qu'ils soient en
mnt/xlses/split/v2/name with space
Essayer
De
man rsync
:la source
man rsync
et en effectuant une recherche (/s
) pour "--protect". Pour installer avec homebrew:brew install homebrew/dupes/rsync
Si non trouvé, lancezbrew search rsync
.rsync -Pavuz 'you@host:~/file\ with\ spaces' ./
Cela fonctionne dans bash: échappez les espaces avec une barre oblique inverse, puis utilisez des guillemets:
Ou si vous avez le chemin dans la variable $ remote_path, les espaces peuvent être échappés avec substitution:
la source
-s
option fonctionne sur n'importe quelle version moderne de rsync et est conçue pour résoudre ce problèmeUtilisez deux paires de citations
Ne vous embêtez pas avec toutes les barres obliques inverses, utilisez simplement des guillemets simples entre guillemets doubles :
Vous pouvez également utiliser l'inverse, c'est-à-dire les guillemets doubles à l'intérieur de guillemets simples :
Plus d'infos
Caractères génériques côté serveur
Si vous voulez
*
interpréter un message sur le serveur plutôt que sur le client, vous*
devez le placer dans une des deux paires de guillemets. Je trouve cela contre-intuitif car, logiquement, les guillemets externes échappent à l'interprétation du client, tandis que les guillemets intérieurs échappent à l'interprétation du serveur.Protéger les args
L'avantage, par rapport à la
--protect-args
solution , est que vous n'avez pas les restrictions de la--protect-args
, vous pouvez donc utiliser des caractères spéciaux tels que~
ou$
. Pour que vous puissiez écrire:ou
Notez que le tilde (
~
) dans le dernier exemple doit être en dehors des guillemets doubles.Vous pouvez mettre l’une des paires de guillemets tout autour du nom d’utilisateur @ hôte: partie du fichier (par exemple
ssh "[email protected]:'/home/me/test file'" .
) .la source
Je comprends que c’est une vieille question, mais j’ai pensé que j’ajouterais au corpus de connaissances existant.
J'ai utilisé
rsync
avec plusieurs dossiers avec de l'espace et cela fonctionne. J'ai des dossiers numérotés de 1 à 10 comme suit:The\ Folder1
The\ Folder2
The\ Folder3
The\ Folder10
Les 2 instances que vous souhaitez utiliser
rsync
sont locales et distantes.Local - Notez le manque de guillemets.
Remote - Notez la présence de guillemets
la source
De manière générale, citez l'argument et échappez aux caractères d'espacement. Dans l'exemple que vous avez donné, essayez:
la source
À partir des
rsync
pages de manuel:la source
Eh bien, je vais répondre à cette question moi-même, bien que quelqu'un d'autre puisse mieux l'expliquer.
Il est évident que la configuration de la machine de destination affecte la façon dont les arguments sont analysés et que nous devons avoir quelque chose qui rend difficile l’utilisation de guillemets ou de barres obliques pour échapper aux espaces, mais nous pouvons utiliser des caractères génériques, c’est ce que j’ai fait.
Cela fonctionne pour moi car il n'y a qu'un seul répertoire qui commence par name si j'avais plusieurs répertoires, cela ne fonctionnerait pas.
En fin de compte, je dois comprendre comment configurer le serveur distant de manière à ce qu'il puisse analyser plus efficacement le nom du chemin d'accès. Je n'utilise jamais d'espaces dans les noms de répertoires, mais la personne qui les a configurés l'a fait et au moins pour l'instant, je suis bloquée.
la source
Selon la situation, une option rapide consiste à créer un lien symbolique sur le système distant:
Ensuite, utilisez le
-L
drapeau dansrsync
lequel il est indiqué de suivre le contenu du répertoire:la source
la double évacuation fonctionne aussi
la source
Essayez de cette façon:
la source