web-dev-qa-db-fra.com

Comment puis-je copier plusieurs fichiers sur SCP dans une commande?

Je dois transporter beaucoup de fichiers d'un PC à un autre (Linux). Je voudrais utiliser scp pour cela, mais scp permet uniquement de transférer un fichier à la fois.

Comment puis-je faire ceci?

J'ai

  • Aucune possibilité d'utiliser rsync ou tout autre protocole
  • Aucune possibilité d'utiliser des certificats sans pépins de phrasePhrase (mais avoir un certificat avec une phrase secrète)
  • Une liste de fichiers à transférer et une liste avec le chemin de destination des fichiers sur l'autre serveur
  • Les fichiers sont répartis sur beaucoup de répertoires, et tous les fichiers des annuaires que je souhaite copier.

Si possible, j'aimerais gzip et ungzip de manière transparente pour sauver la bande passante!

Est-ce possible?

22
Peter Smit

Utilisez tar :

tar cvzf - -T list_of_filenames | ssh hostname tar xzf -
32
akira

J'aimerais utiliser SCP pour cela, mais SCP ne permet que le transfert d'un fichier à la fois.

Je suis à peu près sûr que ce n'est pas vrai, du moins pas pour la commande scp fournie par l'OpenSSH incluse avec la plupart des distributions Linux.

J'utilise scp file1 file2 ... fileN user@Host:/destination/directory/ assez fréquemment.

Pour la compression transparente, le protocole SSH a cette intégré et scp peut l'utiliser si vous fournissez le -C option sur la ligne de commande. Pour beaucoup de petits fichiers similaires, vous trouverez que l'option TAR + GZ proposée par Akira gagne une meilleure compression car elle peut utiliser une similitude entre ces fichiers où scp compresse chaque fichier comme une entité distincte. Je préfère généralement utiliser SCP, car il est plus facile de reprendre un transfert partiel (ou, bien que je sache dans cette situation, le questionneur n'a pas l'option) rsync comme cela est à la fois plus facile à reprendre et aux actions L'avantage de compression complet de l'option TAR + GZZ.

17
David Spillett

NE PAS scp -r yourdir otherhost:/otherdir travailler?

Essayez cela alors:

tar cfz - . | ssh otherhost "cd /mydir; tar xvzf -"

le drapeau z- la goudron compression. Ou vous pouvez utiliser -c à ssh:

tar cf - . | ssh -C otherhost "cd /mydir; tar xvf -"
4
Jimmy Hedman

Sur RHEL5, voici la seule façon possible que je sache de sécuriser la copie une liste de fichiers contenant des caractères spéciaux (comme un espace). Faites un script shell et inclure les éléments suivants:

FILE="/path/filename"
while read line; do
scp "$line" username@servername:/destination/
done < $FILE
1
Brian Thomas