Je suis nouveau sur linux, je veux copier un fichier d'un système distant vers un système local ... maintenant j'utilise la commande scp dans le système linux .. J'ai des noms de dossiers ou de fichiers avec des espaces, quand j'essaye de copier ça fichier, il affiche le message d'erreur: "Aucun fichier ou répertoire"
J'ai essayé:
scp [email protected]:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/
J'ai vu quelques références en ligne mais je ne comprends pas parfaitement, quelqu'un peut-il m'aider à ce sujet?
comment puis-je échapper des espaces dans les noms de fichiers ou de répertoires pendant la copie ...
Réponses:
Fondamentalement, vous devez l'échapper deux fois, car il s'est échappé localement puis à l'extrémité distante.
Il y a quelques options que vous pouvez faire (en bash):
la source
scp [email protected]:'$(ls -t | head -1)' .
obtenir le fichier le plus récemment créé sur le serveur, ouscp [email protected]:'dir/*.{xml,pdf}' .
obtenir tous les fichiers xml et pdf à partir d'un répertoire distant. En général, je préfère cela à la commodité des fichiers qui ont des espaces. Les fichiers avec des espaces sont toujours un problème.travaux
ne marche pas
La raison en est que la chaîne est interprétée par le shell avant que le chemin d'accès ne soit transmis à la commande scp. Donc, quand il arrive à la télécommande, la télécommande recherche une chaîne avec des guillemets non échappés et elle échoue
Pour voir cela en action, démarrez un shell avec les options -vx c'est
bash -vx
-à- dire et il affichera la version interpolée de la commande lors de son exécution.la source
"
ou simple,'
travailler de la même façonVous pouvez également faire quelque chose comme:
Le premier niveau de guillemets sera interprété par scp, puis le deuxième niveau de guillemets conservera les espaces.
la source
Utilisez 3 barres obliques inverses pour échapper les espaces dans les noms des répertoires:
scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads
devrait copier dans votre
Downloads
répertoire àfile
partir du répertoire distant appelédirectory with spaces
.la source
J'ai eu beaucoup de mal à faire fonctionner cela pour une variable shell contenant un nom de fichier avec des espaces. Pour une raison quelconque, en utilisant
comme dans la réponse de @ Adrian semble échouer.
Il s'avère que ce qui fonctionne le mieux est d'utiliser une extension de paramètre pour ajouter des barres obliques inverses aux espaces , comme suit.
la source
file="${file//\ /\\\ }"
Désolé d'utiliser cette question Linux pour mettre cette astuce pour Powershell sur Windows 10: le caractère spatial s'échappant avec des barres obliques inverses ou entourant de guillemets ne fonctionnait pas pour moi dans ce cas. Pas efficace, mais je l'ai résolu en utilisant le "?" char à la place:
pour le fichier "tasks.txt Jun-22.bkp" Je l'ai téléchargé en utilisant "tasks.txt? Jun-22.bkp"
la source