it-swarm-vi.tech

Scp có thể sao chép thư mục đệ quy?

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?

610
kernel

Đúng, sử dụng -r:

scp -rp sourcedirectory [email protected]:/path
  • -r có nghĩa là đệ quy
  • -p bảo toàn thời gian sửa đổi, thời gian truy cập và chế độ từ tệp gốc.

Lưu ý: Điều này tạo ra sourcedirectory bên trong /path do đó các tệp sẽ ở /path/sourcedirectory

981
dmourati

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.

177
Phil Hollenback

Đó 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.

34
HedgeMage

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
12
Tarun

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:

  • -a: chế độ lưu trữ (bao gồm rất nhiều tùy chọn phổ biến mặc định, bao gồm bảo toàn liên kết tượng trưng)
  • -z: nén
  • -v: verbose: hiển thị tập tin
  • -P: hiển thị progess như các tệp được thực hiện/các tệp còn lại
  • -e ssh: làm rsync trong giao thức ssh
  • --delete: xóa các tệp ở đích không còn trong nguồn
7
mick

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

4
user9869932

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...

2
Anubioz

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
1
Franck Dernoncourt

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.

0
atthik