Pertanyaan Dapatkah scp menyalin direktori secara rekursif?


Saat ini saya hanya dapat menyalin satu .tar mengajukan. Tapi bagaimana saya bisa menyalin direktori secara rekursif dengan scp?


518
2018-04-29 04:24






Jawaban:


Yup, gunakan -r:

scp -rp sourcedirectory user@dest:/path
  • -r berarti rekursif
  • -p mempertahankan waktu modifikasi, waktu akses, dan mode dari file asli.

Catatan: Ini menciptakan sourcedirectory dalam /path dengan demikian file-file akan masuk /path/sourcedirectory


838
2018-04-29 04:28



Namun perlu diingat bahwa ini tidak akan mempertahankan symlink. - CpnCrunch
Perhatikan itu -pr (opsi dalam urutan terbalik) tidak akan menyalin folder, lebih baik konten mereka ke direktori target (tampaknya, urutan opsi penting). - pms
Untuk beberapa alasan /path tampaknya relatif terhadap users $HOME - bagaimana saya membuatnya mutlak tanpa root@? - Jonathan
Ya, SCP tidak pernah meletakkan file di mana saya inginkan. Seringkali ketika mencoba untuk mengganti direktori, saya entah bagaimana berakhir dengan direktori lain di dalamnya dengan nama yang sama sebagai gantinya. Saya ekstra hati-hati dengan ini. - sudo


Meskipun jawaban sebelumnya secara teknis benar, Anda juga harus mempertimbangkan untuk menggunakannya rsync sebagai gantinya. rsync membandingkan data di sisi pengirim dan penerima dengan mekanisme diff sehingga tidak perlu mengirim ulang data yang sudah dikirim sebelumnya.

Jika Anda akan menyalin sesuatu ke mesin jarak jauh lebih dari sekali, gunakan rsync. Sebenarnya, ini bagus untuk digunakan rsync setiap kali karena memiliki lebih banyak kontrol untuk hal-hal seperti menyalin izin dan kepemilikan file dan mengecualikan file atau direktori tertentu. Secara umum:

$ rsync -av /local/dir/ server:/remote/dir/

akan menyinkronkan direktori lokal dengan direktori jauh. Jika Anda menjalankannya untuk kedua kalinya dan konten dari direktori lokal tidak berubah, tidak ada data yang akan ditransfer - jauh lebih efisien daripada berjalan scp dan menyalin semuanya setiap saat.

Juga, rsync memungkinkan Anda untuk memulihkan dari transfer terputus sangat mudah, tidak seperti scp.

Akhirnya, versi modern dari rsync secara default dijalankan melalui ssh, jadi jika scp sudah bekerja, rsync harus cukup banyak menjadi pengganti drop-in.


149
2018-04-29 05:11



"tidak ada data yang akan ditransfer" kecuali, tentu saja, data yang diperlukan untuk menentukan apa yang telah atau tidak berubah. - thsutton
Ha ya aku agak memoles itu sedikit jelas. Kami tidak berbicara belitan kuantum di sini. - Phil Hollenback
Sangat menyedihkan bahwa osx, win7 dan bahkan ubuntu tidak menggunakan sesuatu seperti rsync untuk GUI mereka. - cregox
dmourati saya menjawab pertanyaannya. Saya mengatakan kepadanya cara yang lebih baik untuk melakukannya. - Phil Hollenback
@raphnguyen: tidak, menghapus file dari direktori lokal tidak akan menghapusnya dari direktori jauh. Anda dapat mengubah perilaku ini dengan --delete pilihan rsync. - Phil Hollenback


Itu adalah apa -r pilihan adalah untuk. :)

Lihat halaman manual scp untuk info lebih lanjut jika diperlukan.


30
2018-04-29 04:27





Pilihan Salinan Rekursif '-r' (huruf kecil)

scp -r

Yang saya bingung dengan opsi copy rekursif lokal biasa '-R' (huruf besar)

cp -R

9
2017-09-11 17:53



Saya hanya ingin menunjukkan perbedaan antara cp dan scp as -r dan -R tidak sama. unix.stackexchange.com/questions/18712/… - Tarun


Cara terbaik adalah menggunakan rsync melalui SSH

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

Pilihan favorit saya adalah -Pazvessh --delete:

  • -a: mode arsip (termasuk banyak opsi umum default, termasuk mempertahankan symlink)
  • -z: kompres
  • -v: verbose: tampilkan file
  • -P: menunjukkan progess sebagai file yang dilakukan / file yang tersisa
  • -e ssh: lakukan rsync dalam protokol ssh
  • --delete: hapus file di tujuan yang tidak lagi di sumbernya

4
2017-11-05 18:33



Semua versi dari rsync yang saya gunakan akan digunakan ssh secara default, jadi -essh tidak mungkin dibutuhkan. Dan pilihan perintah yang digunakan untuk terhubung ke host remote benar-benar tidak berhubungan dengan menyalin secara rekursif. - kasperd


Setelah mencari tanda salin rekursif, dan berhasil menggunakannya berkat posting ini, saya ingin posting hanya saran.

Jika kasusnya adalah Anda menyalin (secara rekursif) sebuah direktori. Mungkin jika file dikirim dikompresi Anda bisa menghemat waktu dalam transfer

Apa yang saya lakukan pada akhirnya adalah:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

Semoga ini membantu


3
2018-06-06 18:00



ekstensi file juga harus baik .tar.gz atau .tgz karena file tersebut adalah arsip tar gzip (karena -z bendera digunakan). - anthonybell


Anda dapat menyalin direktori secara rekursif ke dalam arsip terkompresi dengan perintah sederhana ini:

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

Misalnya, untuk menyalin konten /var/log dari domain.com untuk ~/logs.tgz kamu lari:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

Anda juga dapat mengekstrak file pada sistem target dengan menggunakan pipa. Perintah ini akan menyalin konten /var/log di domain.com untuk ~/destination/log pada sistem Anda:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Meskipun untuk mencerminkan direktori, Anda mungkin harus menggunakan rsync...


1
2018-01-06 07:20





Jika Anda memilih untuk memasukkan kata sandi pengguna sebagai parameter daripada memasukkannya secara interaktif, Anda dapat menggunakannya sshpass(sudo apt-get install -y sshpass).

Contoh:

sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder

0
2018-01-06 06:49