Bagaimana saya bisa menyalin banyak file melalui scp dalam satu perintah?


20

Saya harus memindahkan banyak file dari satu PC ke PC lainnya (keduanya Linux). Saya ingin menggunakan scpuntuk itu, tetapi scphanya memungkinkan untuk mentransfer satu file sekaligus.

Bagaimana saya bisa melakukan ini?

saya sudah

  • Tidak ada kemungkinan untuk menggunakan rsync atau protokol lainnya
  • Tidak ada kemungkinan untuk menggunakan sertifikat bebas frasa sandi (tetapi memiliki sertifikat dengan frasa sandi)
  • Daftar file yang akan ditransfer dan daftar dengan jalur tujuan file di server lain
  • File-file tersebar di banyak direktori, dan tidak semua file dalam direktori yang ingin saya salin

Jika memungkinkan, saya ingin gzip dan ungzip secara transparan untuk menghemat bandwidth!

Apakah ini mungkin?

Jawaban:


31

Gunakan tar:

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

2
Inilah format file: "Dalam mode c, tar akan membaca nama yang akan diarsipkan dari nama file. Nama khusus -C'' on a line by itself will cause the current directory to be changed to the directory specified on the following line. Names are terminated by newlines unless --null is specified. Note that --null also disables the special handling of lines containing -C ''."
Kousha

14

Saya ingin menggunakan scp untuk itu, tetapi scp hanya memungkinkan untuk mentransfer satu file sekaligus.

Saya cukup yakin itu tidak benar, paling tidak untuk scpperintah yang diberikan oleh OpenSSH yang disertakan dengan sebagian besar distribusi Linux.

Saya scp file1 file2 ... fileN user@host:/destination/directory/cukup sering menggunakan .

Untuk kompresi transparan, protokol SSH memiliki bawaan dan scpdapat menggunakannya jika Anda memberikan -Copsi pada baris perintah. Untuk banyak file kecil yang serupa, Anda akan menemukan opsi tar + gz yang disarankan oleh akira mendapatkan kompresi yang lebih baik karena dapat menggunakan kesamaan antara file-file tersebut di mana scpkompres setiap file sebagai entitas yang terpisah. Saya biasanya lebih suka menggunakan scp karena lebih mudah untuk melanjutkan transfer parsial (atau, meskipun saya tahu dalam situasi ini si penanya tidak memiliki opsi) rsynckarena keduanya lebih mudah untuk melanjutkan dan membagikan seluruh opsi tar + gz option Keuntungan kompresi -stream.


Ini adalah jawaban yang benar, tetapi hanya mentransfer satu file pada satu waktu. Namun demikian itu akan membuat penggunaan penuh bandwidth yang tersedia dan harus berjalan secepat mungkin.
Benjamin Bannier

4

Tidak scp -r yourdir otherhost:/otherdirbekerja

Coba ini:

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

yang z-flag untuk tar tidak kompresi. Atau Anda dapat menggunakan -C untuk ssh:

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

apa yang -Charus dilakukan
Nathan Fellman

1
Masalahnya adalah, saya punya daftar file. File-file tersebar di banyak direktori, dan tidak semua file dalam direktori yang ingin saya salin
Peter Smit

2
@Nathan: -C adalah untuk lett ssh melakukan kompresi.
Jimmy Hedman

1

Di RHEL5, berikut adalah satu-satunya cara yang mungkin saya tahu untuk mengamankan menyalin daftar file yang berisi karakter khusus (seperti spasi). Buat skrip shell dan sertakan yang berikut:

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

0

Itu bisa dilakukan tanpa banyak masalah.

Saya cukup membuat daftar file dengan nama host di sebelah setiap file dan scp tampaknya menguraikannya dengan baik. yaitu.

srchost=`hostname`
myfiles="${srchost}:~/.bashrc ${srchost}:~/.bash_profile ${srchost}:~/.vimrc ${srchost}:~/.viminfo ${srchost}:~/.toprc ${srchost}:~/.dir_colors"
scp -v $myfiles $HOME

Scp tampaknya berfungsi dengan baik dengan sintaks ini. Ketika saya mencobanya tanpa nama host di sebelah setiap file gagal setelah file pertama. Saya sepertinya mengingat sintaks lain yang saya gunakan untuk ini sebelumnya dan akan mempostingnya setelah saya menemukannya.


Ini berfungsi, tetapi cukup lambat - tampaknya memulai koneksi untuk setiap file ... (Saya datang ke sini mencari solusi untuk salinan lambat ...) ~/kebanyakan dapat ditinggalkan - SCP beroperasi relatif ke direktori home. .. Jika Anda memiliki daftar dari tempat lain di $list: scp $(echo "$list"|sed "s/^/$srchost:/") local_destination(Ini akan merusak nama file dengan spasi)
Gert van den Berg

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.