Bisakah saya scp folder yang memiliki sub folder?

31

Saya memiliki folder yang berisi file untuk situs web statis seperti:

/site/index.html
/site/css/css.css
/site/js/js.js
/site/images/...

Jika saya memperbarui sesuatu di laptop saya, saya ingin satu perintah untuk mengirim file ke server ubuntu saya. Saya tidak ingin men-setup FTP jika saya tidak punya, bertanya-tanya apakah scp akan dapat menangani ini?

Blankman
sumber
Saya lebih suka tarmelalui ssh: unix.stackexchange.com/a/10028/79839
chicks

Jawaban:

56

Perintah scp -r source user@target:destakan menjalankan semua subdirektori dari sumber dan menyalinnya.

Namun, scpberperilaku seperti cpdan selalu menyalin file, bahkan jika itu sama pada sumber dan tujuan. [Lihat di sini untuk solusinya.]

Karena ini adalah situs web statis, kemungkinan besar Anda hanya membuat pembaruan, bukan menciptakan kembali semuanya, jadi Anda mungkin akan menemukan banyak hal bergerak lebih cepat jika Anda menggunakan rsynclebih dari ssh alih-alih scp. Mungkin kira-kira seperti itu

rsync -av -e ssh source user@target:dest

...untuk memulai. Jika Anda melakukan ini di LAN, saya pribadi akan menggunakan opsi -avWuntuk rsync.

Rsync juga memberi Anda kemampuan untuk menduplikasi penghapusan di sumber Anda; jadi jika Anda menghapus file dari pohon Anda, Anda dapat menjalankan rsyncseperti di atas, dan termasuk bendera --deletedan itu akan menghapus file yang sama dari sisi tujuan.

David Mackintosh
sumber
9

scp memiliki flag rekursif yang akan melakukan apa yang Anda inginkan. scp -r /base/directory user@server:/to/location

dari man scp

-r      Recursively copy entire directories.  Note that scp follows symbolic
          links encountered in the tree traversal.
Zypher
sumber
2

scp -r dan rsync -r adalah cara yang paling dapat diandalkan untuk mendapatkan apa yang Anda inginkan, seperti yang dicatat orang lain.

Anda juga dapat menggunakan sshfs untuk 'me-mount' seolah-olah itu adalah drive lokal: sshfs user@host:/site /mnt/mountpoint

(Namun Anda mungkin lebih baik bekerja secara lokal dan menggunakan rsync. Hanya alat lain yang perlu diperhatikan.)

Luke Schlather
sumber