Actuellement, je ne peux copier qu'un seul .tar
fichier. Mais comment copier récursivement des répertoires avec scp
?
Oui, utilisez -r
:
scp -rp sourcedirectory user@dest:/path
Remarque: Cela crée le sourcedirectory
à l'intérieur /path
ainsi les fichiers seront dans /path/sourcedirectory
Bien que les réponses précédentes soient techniquement correctes, vous devriez également envisager d'utiliser rsync
à la place. rsync
compare les données des côtés d'envoi et de réception avec un mécanisme de diff pour ne pas avoir à renvoyer des données déjà envoyées précédemment.
Si vous allez copier quelque chose sur une machine distante plusieurs fois, utilisez rsync
. En fait, il est bon d'utiliser rsync
à chaque fois car il a plus de contrôles pour des choses comme la copie des autorisations de fichiers et la propriété et l'exclusion de certains fichiers ou répertoires. En général:
$ rsync -av /local/dir/ server:/remote/dir/
synchronisera un répertoire local avec un répertoire distant. Si vous l'exécutez une deuxième fois et que le contenu du répertoire local n'a pas changé, aucune donnée ne sera transférée - beaucoup plus efficace que d'exécuter scp
et de tout copier à chaque fois.
De plus, rsync
vous permet de récupérer très facilement des transferts interrompus, contrairement à scp
.
Enfin, les versions modernes de rsync
par défaut fonctionnent sur ssh, donc si scp
fonctionne déjà, rsync
devrait à peu près être un remplacement direct.
C'est ce que le -r
l'option est pour. :)
Voir la page de manuel de scp pour plus d'informations si nécessaire.
Option de copie récursive '-r' (minuscule)
scp -r
Ce que je confond avec l'option de copie récursive locale régulière '-R' (majuscule)
cp -R
La meilleure façon est d'utiliser rsync sur SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Mes options préférées sont -Pazvessh - supprimer:
Après avoir recherché l'indicateur de copie récursive et l'avoir utilisé avec succès grâce à ce message, je voudrais poster juste une suggestion.
Si le cas est que vous copiez (récursivement) un répertoire. Peut-être que si les fichiers sont envoyés compressés, vous pourriez gagner du temps dans le transfert
Ce que j'ai finalement fait, c'est:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
J'espère que cela t'aides
Vous pouvez copier récursivement un répertoire dans une archive compressée avec cette commande simple:
ssh -p 22 [email protected] 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Par exemple, pour copier le contenu de /var/log
de domain.com
à ~/logs.tgz
vous courez:
ssh -p 22 [email protected] 'cd /var && tar zcvf - log' > ~/logs.tgz
Vous pouvez également extraire des fichiers sur le système cible à l'aide de canaux. Cette commande copiera le contenu de /var/log
à domain.com
à ~/destination/log
sur votre système:
ssh -p 22 [email protected] 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Bien que pour mettre en miroir un répertoire, vous devriez probablement utiliser rsync
...
Si vous préférez transmettre le mot de passe de l'utilisateur en tant que paramètre plutôt que de le saisir de manière interactive, vous pouvez utiliser sshpass
(Sudo apt-get install -y sshpass
).
Exemple:
sshpass -p 'remote_password' scp -rp /src/folder [email protected]:/dest/folder
Vous pouvez utiliser l'option -r avec la commande scp pour copier les répertoires de manière récursive sur n'importe quel système. Si vous avez besoin d'autre chose, reportez-vous à tutoriel de commande scp . L'option -r représente une opération récursive dans la plupart des commandes Linux.