2 votes

Utilisation de rsync avec des noms de chemin contenant des espaces

J'essaie d'utiliser rsync (sur MacOS Catalina) mais j'ai des problèmes avec les espaces dans les noms des chemins de fichiers. J'ai utilisé -s o --protect-args mais elles ne font rien (quand je regarde l'aide de rsync, ces options ne sont pas listées).

Je suis en train de courir rsync 2.6.9 en zsh . Quelqu'un peut-il m'aider ?

Voici ce que j'obtiens lorsque je lance cette commande rsync :

chris@cgimac ~ % rsync -ahv /Volumes/G_5TB_general/Backup of CG-nas/mac drives/Fitness and health /Volumes/G_5TB_general/temp dump
building file list ... 
rsync: link_stat "/Volumes/G_5TB_general/Backup" failed: No such file or directory (2)
rsync: link_stat "/Users/chris/of" failed: No such file or directory (2) 
rsync: link_stat "/Users/chris/CG-nas/mac" failed: No such file or directory (2)
rsync: link_stat "/Users/chris/drives/Fitness" failed: No such file or directory (2)
rsync: link_stat "/Users/chris/and" failed: No such file or directory (2) 
rsync: link_stat "/Users/chris/health" failed: No such file or directory (2) done

J'obtiens exactement le même résultat si je modifie la commande en

rsync  -ahv  ‘/Volumes/G_5TB_general/Backup of CG-nas/mac drives/Fitness and health’ ‘/Volumes/G_5TB_general/temp dump’

J'ai regardé ailleurs et il y a beaucoup d'exemples, par exemple le st.

https://www.cyberciti.biz/faq/rsync-transfer-filename-that-contains-whitespace/

où l'option -s (ou --protect-args) pour rsync fonctionne apparemment.

0 votes

Pouvez-vous s'il vous plaît ajouter l'actuel rsync la commande que vous exécutez (y compris les arguments) et les messages d'erreur que vous obtenez ?

0 votes

Rsync n'a pas de -s (Mojave au moins), mais -S . De plus, aucun --protect-args soit. De même, pour les espaces dans le chemin du fichier, le caractère d'échappement fonctionne. De plus, de nombreuses commandes acceptent les chaînes de caractères entre guillemets.

1 votes

@ankii Toutes les commandes le font :-) La citation est un mécanisme du shell, la commande ne le remarque pas.

7voto

SPYBUG96 Points 1539

Bien que l'exemple en question soit un local rsync où un seul niveau de citation des arguments pour le chemin est suffisant, rsync les opérations impliquant un serveur distant nécessitent deux niveaux de cotation pour le voie distante . Par exemple :

$ rsync -ahv \
    remoteserver:'/remote path w/ spaces and (special chars)' \
    '/local path w/ spaces and (special chars)'
bash: -c: line 0: syntax error near unexpected token `('
bash: -c: line 0: `rsync --server --sender -vlogDtpr . /remote path w/ spaces and (special chars)' .
...

$ rsync -ahv \
    remoteserver:\''/remote path w/ spaces and (special chars)'\' \
    '/local path w/ spaces and (special chars)'
receiving file list ...
...
  • Le chemin local dans l'exemple ci-dessus rsync est citée une seule fois (entourée de ' ), parce qu'il n'est interprété que par l'interpréteur de commandes local (en tant qu'argument de la commande rsync ).
  • Le chemin distant dans l'exemple ci-dessus rsync est citée deux fois (entourée des deux ' citations et \' caractères guillemets littéraux), car elle est interprétée par le shell local y le shell distant (en tant qu'argument de rsync --server ).
  • Un exemple avec des parenthèses - en plus des espaces - a été choisi pour illustrer le message d'erreur, révélant pourquoi les caractères spéciaux posent problème lorsqu'ils ne sont pas correctement cités dans le chemin d'accès distant.
  • Dans cet exemple, la citation est effectuée en Bash à la fois pour le shell local et le shell distant. Selon les règles de citation d'autres shells, il peut être nécessaire de l'adapter.
  • Bien sûr, si le chemin d'accès lui-même contient un caractère guillemet simple, vous devrez être plus fantaisiste en utilisant quelque chose comme https://unix.stackexchange.com/a/187452 .

4voto

nohillside Points 82672

El -s ne protège pas contre les arguments contenant des espaces passés sur la ligne de commande, mais une citation correcte le fait.

rsync -ahv "/Volumes/G_5TB_general/Backup of CG-nas/mac drives/Fitness and health" "/Volumes/G_5TB_general/temp dump"

(dans votre deuxième exemple, vous semblez utiliser des guillemets typographiques).

0 votes

Merci pour cela, j'ai copié votre ligne de commande et cela a fonctionné.

0 votes

Mais lorsque j'ai ajouté une autre option, rien ne s'est produit et j'ai eu un message "dquote".

0 votes

Rsync --dry-run -ahv "/Volumes/G_5TB_general/Backup of CG-nas/mac drives/Fitness and health" "/Volumes/G_5TB_general/temp dump" dquote>

1voto

lenooh Points 119

Sur mac OS, j'ai dû s'échapper normalement du premier chemin et le deuxième chemin échappé + apostrophe . Exemple :

rsync -avhu VirtualBox\ VMs/Windows\ 10 bob@192.168.1.42:"/Users/bob/VirtualBox\ VMs/"

C'est le combinaison unique qui ont travaillé avec des espaces. Les deux machines sont des macs.

1 votes

Pourquoi le downvote ? Si cela ne fonctionne pas pour vous, essayez l'une des autres combinaisons suivantes

0 votes

Le "" dans la deuxième partie ne devrait pas être nécessaire tant que vous échappez le caractère espace.

1 votes

J'ai essayé toutes les combinaisons, et c'est la seule qui a fonctionné sous MacOS. Les deux machines étaient des Macs.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X