Hiện tại tôi chỉ có thể sao chép một .tar
tập tin. Nhưng làm cách nào tôi có thể sao chép các thư mục đệ quy với scp
?
Đúng, sử dụng -r
:
scp -rp sourcedirectory [email protected]:/path
Lưu ý: Điều này tạo ra sourcedirectory
bên trong /path
do đó các tệp sẽ ở /path/sourcedirectory
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 vào đó. 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ế, sử dụng rsync
mỗi lần 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ừ các lần 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 của rsync
theo mặc định chạy trên ssh, vì vậy nếu scp
đã hoạt động, rsync
sẽ thay thế khá nhiều.
Đó là những gì -r
tùy chọn là dành cho. :)
Xem trang scp man để biết thêm thông tin 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/ [email protected]:/dest/
rsync -a -essh [email protected]:/source/ /dest/
Các tùy chọn yêu thích của tôi là -Pazvessh --delete:
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 muốn chỉ 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 [email protected]:/directory
ssh [email protected]
remote$ tar -xzvf local.tar.gz
Hi vọng điêu nay co ich
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 [email protected] '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
đến ~/logs.tgz
bạn chạy:
ssh -p 22 [email protected] '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 của /var/log
tại domain.com
đến ~/destination/log
trên hệ thống của bạn:
ssh -p 22 [email protected] '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 làm 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 [email protected]:/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, hãy 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.