Je voudrais copier des fichiers depuis / vers un serveur distant dans différents répertoires. Par exemple, je veux exécuter ces 4 commandes à la fois.
scp remote:A/1.txt local:A/1.txt
scp remote:A/2.txt local:A/2.txt
scp remote:B/1.txt local:B/1.txt
scp remote:C/1.txt local:C/1.txt
Quelle est la façon la plus simple de procéder?
rsync
, peut-être que cela peut vous aider dans ce cas et dans de nombreux cas à venir. Ensuite, pour éviter de saisir des mots de passe (et encore moins plusieurs fois), vous devez liressh
les clés publiques / privées, par exemple digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2scp [email protected]:'/etc/openvpn/ca.crt /etc/openvpn/client/client0.crt /etc/openvpn/client/client0.key /etc/openvpn/client/ta.key' ./
.Réponses:
Copiez plusieurs fichiers de la télécommande vers la locale:
Copiez plusieurs fichiers du local vers le distant:
Copiez plusieurs fichiers de télécommande à télécommande:
Source: http://www.hypexr.org/linux_scp_help.php
la source
~
ou./
seulement.\{a,b,c\}
transférera les fichiers dans une seule connexion / lot (car ils seront développés sur l'hôte distant), tandis que l'utilisation{a,b,c}
ouvrira plusieurs connexions et la surcharge est tout à fait visible lors du transfert de nombreux fichiersDu local au serveur:
scp file1.txt file2.sh [email protected]:~/pathtoupload
Du serveur au local:
scp -T [email protected]:"file1.txt file2.txt" "~/yourpathtocopy"
la source
-T
option pour supprimer cette erreur.Vous pouvez copier des répertoires entiers en utilisant
-r
switch, donc si vous pouvez isoler vos fichiers dans votre propre répertoire, vous pouvez tout copier à la fois.donc par exemple
Ou s'il y en a peu, vous pouvez utiliser:
la source
Comme Jiri l'a mentionné, vous pouvez utiliser
scp -r user@host:/some/remote/path /some/local/path
pour copier des fichiers de manière récursive. Cela suppose qu'il existe un seul répertoire contenant tous les fichiers que vous souhaitez transférer (et rien d'autre).Cependant, SFTP fournit une alternative si vous souhaitez transférer des fichiers à partir de plusieurs répertoires différents et que les destinations ne sont pas identiques:
Cela utilise la syntaxe "ici doc" pour définir une séquence de commandes d'entrée SFTP. Vous pouvez également placer les commandes SFTP dans un fichier texte et exécuter
sftp user@host -b batchFile.txt
la source
scp
cherché sur Google et analysé le manuel pendant trop longtemps pour trouver cette fonctionnalité, et je suppose que scp ne l'a pas./home/vagrant/Code/
au lieu de~/Code/
.- r
des répertoiresLes réponses avec
{file1,file2,file3}
ne fonctionnent qu'avec bash (à distance ou localement)La vraie façon est:
la source
{…, …, …}
œuvres dans de nombreux obus, pas seulement dans Bash. Cependant, cela fonctionne dans n'importe quel shell, c'est donc clairement mieux.Après avoir joué avec scp pendant un certain temps, j'ai trouvé la solution la plus robuste:
(Attention aux guillemets simples et doubles)
Local à distant:
De distance au local:
Notez que quoi que ce soit après "HOST:" sera envoyé à la télécommande et analysé là-bas. Nous devons donc nous assurer qu'ils ne sont pas traités par le shell local. C'est pourquoi les guillemets simples entrent en jeu. Les guillemets doubles sont utilisés pour gérer les espaces dans les noms de fichiers.
Si les fichiers sont tous dans le même répertoire, nous pouvons utiliser * pour les faire correspondre tous, tels que
Comparé à l'utilisation de la syntaxe "{}" qui n'est supportée que par certains shells, celle-ci est universelle
la source
{}
syntaxe facilite la copie de plusieurs fichiers à partir du même répertoire, y a-t-il un moyen de le faire descp -r
sorte qu'il"FILE1" "FILE2"
puisse s'agir de chemins relatifs et non de chemins absolus vers les fichiers?Le moyen le plus simple est
Ainsi, la liste {..} peut inclure des répertoires (A, B et C voici des répertoires; "1.txt" et "2.txt" sont des noms de fichier dans ces répertoires).
Bien qu'il copierait tous ces quatre fichiers dans un répertoire local - je ne sais pas si c'est ce que vous vouliez.
Dans le cas ci-dessus, vous finirez par copier les fichiers distants A / 1.txt, A / 2.txt, B / 3.txt et C / 4.txt dans un seul répertoire local, avec les noms de fichier ./1.txt, ./2.txt, ./3.txt et ./4.txt
la source
sh
.local$ scp -r remote:{A/1.txt,A/2.txt,B/3.txt,C/4.txt,D,F} ./
Problème : copie de plusieurs répertoires du serveur distant vers la machine locale à l'aide d'une seule commande SCP et conservation de chaque répertoire tel qu'il se trouve sur le serveur distant.
Solution : SCP peut le faire facilement. Cela résout le problème ennuyeux de la saisie du mot de passe plusieurs fois lors de l'utilisation de SCP avec plusieurs dossiers. Par conséquent, cela fait également gagner beaucoup de temps!
par exemple
PS: Motivé par cette excellente réponse: scp ou sftp copier plusieurs fichiers avec une seule commande
Sur la base des commentaires, cela fonctionne également très bien dans Git Bash sur Windows
la source
Copiez plusieurs répertoires:
la source
Vous pouvez procéder de cette façon:
Cela téléchargera tous les noms de fichiers répertoriés dans le répertoire local sur lequel vous vous trouvez.
Assurez-vous de ne pas mettre d'espaces entre chaque nom de fichier, utilisez uniquement une virgule
,
.la source
/path/to/files/\\{file1.ext,file2.ext,file3.ext\\}
si les fichiers avaient des extensions différentes. Remarque pour les personnes PowerShell (maintenant que MS a rejoint le groupe), vous devez utiliser`
pour vous échapper à la place:/path/to/files/`{file1.ext,file2.ext,file3.ext`}
REMARQUE: Je m'excuse à l'avance de ne répondre qu'à une partie de la question ci-dessus. Cependant, j'ai trouvé ces commandes utiles pour mes besoins Unix actuels.
Téléchargement de fichiers spécifiques d'une machine locale vers une machine distante:
~/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp etc.ext [email protected]:Folder1/DestinationFolderForFiles/
Téléchargement d'un répertoire entier d'une machine locale vers une machine distante:
~$ scp -r Desktop/dump_files [email protected]:Folder1/DestinationFolderForFiles/
Téléchargement d'un répertoire entier d'une machine distante vers une machine locale:
~/Desktop$ scp -r [email protected]:Public/web/ Desktop/
la source
Dans mon cas, je ne peux utiliser que la commande sftp.
J'ai donc dû utiliser un fichier batch avec sftp. J'ai créé un script tel que le suivant. Cela suppose que vous travaillez dans le répertoire / tmp et que vous souhaitez placer les fichiers dans le système destdir_on_remote_system sur le système distant. Cela ne fonctionne également qu'avec une connexion non interactive. Vous devez configurer des clés publiques / privées pour pouvoir vous connecter sans entrer de mot de passe. Changez au besoin.
la source
votre commande fonctionne parfaitement mais, je veux aussi changer le nom du fichier lors de l'envoi local vers distant. J'ai écrit une commande: - sshpass -p mot de passe scp /path/to/file.txt root @ hostname: /path/newfile.txt
Mais cela donne une erreur que /path/newfile.txt: Aucun fichier ou répertoire de ce type n'a été trouvé plz m'aider dans cette situation
la source
hostname:/path/
existe réellement et qu'il est accessible.scp utilise ssh pour le transfert de données avec la même authentification et offre la même sécurité que ssh.
Une meilleure pratique consiste ici à implémenter "CLÉS SSH ET AUTHENTIFICATION DE CLÉS PUBLIQUES". Avec cela, vous pouvez écrire vos scripts sans vous soucier de l'authentification. Aussi simple que cela.
Voir QU'EST - CE QUE SSH-KEYGEN
la source
Dans le cas spécifique où tous les fichiers ont la même extension mais avec un suffixe différent (par exemple, le nombre de fichiers journaux), vous utilisez ce qui suit:
Cela copiera tous les fichiers nommés some_log_file du dossier donné dans la télécommande, c'est-à-dire some_log_file.1, some_log_file.2, some_log_file.3 ....
la source
la source
-r
option toscp
. Et vous pouvez conserver d'autres attributs (comme l'horodatage) avec l'-p
option.