Problème de copie sécurisée (scp) des noms de fichiers avec des espaces

9

J'essaie de copier des fichiers en utilisant une copie sécurisée (scp). J'essaie d'exécuter la commande suivante mais j'obtiens une erreur en raison de l'espace dans le chemin absolu de l'emplacement du répertoire.

scp -r -P 8484 [email protected]:/media/New Volume/lj /home/pratheep

Je reçois l'erreur suivante:

scp: /media/New: No such file or directory  
scp: Volume/lj: No such file or directory

J'ai essayé d'utiliser la même commande en mettant une barre oblique supplémentaire comme

scp -r -P 8484 [email protected]:/media/New\ Volume/lj /home/pratheep

mais je reçois toujours la même erreur.

Quelqu'un peut-il me dire comment le corriger?

pradeepchhetri
la source

Réponses:

18

Vous devez citer deux fois le nom de votre fichier, un pour le shell local et un pour le distant. Dans le cas le plus simple, vous pouvez effectuer l'une des opérations suivantes

scp -r -P 8484 [email protected]:"'/media/New Volume/lj'" /home/pratheep
scp -r -P 8484 [email protected]:'"/media/New Volume/lj"' /home/pratheep

ou en utilisant l'aide de la complétion des onglets

scp -r -P 8484 [email protected]:/media/New\\\ Volume/lj /home/pratheep
enzotib
la source
3
Il est utile de noter que scputilise sshcomme transport ce qui explique pourquoi il y a deux passes d'interprétation du shell.
msw
1

scpet rsyncpassez des noms de fichiers distants au shell distant. Cela vous permet de passer des modèles, comme dans

scp remotehost:'*.txt' .

mais cela a la conséquence désagréable que vous ayez besoin de devis supplémentaires lorsque vous fournissez un nom de fichier distant.

Vous pouvez passer l' -soption pour rsynclui faire protéger les noms de fichiers contre l'expansion par le shell distant. Mais cela active l'extension générique intégrée de rsync, vous devez donc toujours citer \[?*.

Une solution de contournement consiste à transférer une archive:

ssh -P 8484 [email protected] 'cd "/media/New Volume" && tar cf - lj' |
tar xf - -C /home/pratheep

Une autre méthode consiste à monter le système de fichiers distant, puis à utiliser des outils ordinaires pour effectuer la copie.

mkdir mnt
sshfs -p 8484 [email protected]:/ mnt
cp -Rp 'mnt/media/New Volume/lj' /home/pratheep
fusermount -u mnt
rmdir mnt
Gilles 'SO- arrête d'être méchant'
la source