Câu trả lời:
Đúng, sử dụng -r
:
scp -rp sourcedirectory user@dest:/path
Lưu ý: Điều này tạo ra sourcedirectory
bên trong /path
do đó các tệp sẽ ở trong/path/sourcedirectory
-pr
(các tùy chọn theo thứ tự đảo ngược) sẽ không sao chép các thư mục, thay vì nội dung của chúng vào thư mục đích (rõ ràng, thứ tự của các tùy chọn quan trọng).
Mặc dù các câu trả lời trước là đúng về mặt kỹ thuật, bạn cũng nên xem xét sử dụng rsync
thay thế. rsync
so sánh dữ liệu ở các bên gửi và nhận với một cơ chế khác để nó không phải gửi lại dữ liệu đã được gửi trước đó.
Nếu bạn định sao chép một cái gì đó vào một máy từ xa nhiều lần, hãy sử dụng rsync
. Trên thực tế, nó tốt để sử dụng rsync
mọi lúc vì nó có nhiều điều khiển hơn cho những thứ như sao chép quyền và quyền sở hữu tệp và loại trừ các tệp hoặc thư mục nhất định. Nói chung:
$ rsync -av /local/dir/ server:/remote/dir/
sẽ đồng bộ hóa một thư mục cục bộ với một thư mục từ xa. Nếu bạn chạy nó lần thứ hai và nội dung của thư mục cục bộ không thay đổi, sẽ không có dữ liệu nào được chuyển - hiệu quả hơn nhiều so với việc chạy scp
và sao chép mọi thứ mọi lúc.
Ngoài ra, rsync
cho phép bạn phục hồi từ chuyển bị gián đoạn rất dễ dàng, không giống như scp
.
Cuối cùng, các phiên bản hiện đại rsync
theo mặc định chạy qua ssh, vì vậy nếu scp
đã hoạt động, rsync
thì khá nhiều nên là một sự thay thế thả xuống.
rsync
là hiệu quả hơn. Một điều hiện tại nó scp
không làm là cho phép sao chép giữa các máy chủ từ xa (ít nhất là không chạy ứng dụng khách rsync trên một trong số chúng).
-av
: v là dành cho verbose, một kho lưu trữ và là lối tắt đến -rlptgoD ngụ ý đệ quy, giữ nguyên ngày tháng và liên kết của chủ sở hữu quyền. Nếu bạn chỉ muốn sử dụng đệ quy-r
Đó là những gì các -r
tùy chọn là cho. :)
Xem trang người đàn ông scp để biết thêm nếu cần.
Tùy chọn sao chép đệ quy '-r' (viết thường)
scp -r
Mà tôi nhầm lẫn với tùy chọn sao chép đệ quy cục bộ thông thường '-R' (chữ hoa)
cp -R
Cách tốt nhất là sử dụng rsync trên SSH
rsync -a -essh /source/ user@dest-server:/dest/
rsync -a -essh user@source-server:/source/ /dest/
Các tùy chọn yêu thích của tôi là -Pazvessh --delete:
rsync
mà tôi đã sử dụng sẽ sử dụng ssh
theo mặc định, do đó -essh
không cần thiết. Và lựa chọn lệnh được sử dụng để kết nối với máy chủ từ xa thực sự không liên quan đến việc sao chép đệ quy.
Sau khi tìm kiếm cờ sao chép đệ quy và sử dụng thành công nhờ bài đăng này, tôi chỉ muốn gửi một đề xuất.
Nếu trường hợp là bạn đang sao chép (đệ quy) một thư mục. Có lẽ nếu các tệp được gửi nén, bạn có thể tiết kiệm thời gian trong quá trình chuyển
Những gì tôi đã làm cuối cùng là:
local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz
Hi vọng điêu nay co ich
.tar.gz
hoặc .tgz
vì tập tin là một kho lưu trữ tar được nén (vì -z
cờ được sử dụng).
Bạn có thể sao chép đệ quy một thư mục vào một kho lưu trữ nén bằng lệnh đơn giản này:
ssh -p 22 user@address-to-copy-from.com 'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz
Ví dụ, để sao chép nội dung của /var/log
từ domain.com
để ~/logs.tgz
bạn chạy:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' > ~/logs.tgz
Bạn cũng có thể trích xuất các tập tin trên hệ thống đích bằng cách sử dụng các đường ống. Lệnh này sẽ sao chép nội dung /var/log
tại domain.com
đến ~/destination/log
trên hệ thống của bạn:
ssh -p 22 user@domain.com 'cd /var && tar zcvf - log' | tar xzf - -C ~/destination
Mặc dù để phản chiếu một thư mục, có lẽ bạn nên sử dụng rsync
...
Nếu bạn muốn truyền mật khẩu của người dùng dưới dạng tham số thay vì nhập mật khẩu một cách tương tác, bạn có thể sử dụng sshpass
( sudo apt-get install -y sshpass
).
Thí dụ:
sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder
Bạn có thể sử dụng tùy chọn -r với lệnh scp để sao chép các thư mục đệ quy trên bất kỳ hệ thống nào. Nếu bạn cần bất cứ điều gì khác tham khảo hướng dẫn lệnh scp . Tùy chọn -r là viết tắt của hoạt động đệ quy trong hầu hết các lệnh Linux.
-r
tùy chọn này đã được đề xuất từ nhiều năm trước và là câu trả lời được chấp nhận.
Một tùy chọn khác (có thể tốt hơn để sử dụng nhiều lần) là sử dụng NFS - kiểm tra nfs-kernel-server và cách thiết lập chia sẻ NFS.
scp
nhưng NFS không phải là một lựa chọn.