Câu hỏi Có thể scp sao chép thư mục đệ quy?


Hiện tại tôi chỉ có thể sao chép một đĩa đơn .tar tập tin. Nhưng làm cách nào tôi có thể sao chép thư mục một cách đệ quy scp?


518
2018-04-29 04:24


gốc




Các câu trả lời:


Yup, sử dụng -r:

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

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


838
2018-04-29 04:28



Tuy nhiên, hãy nhớ rằng điều này sẽ không giữ lại các liên kết tượng trưng. - CpnCrunch
Lưu ý rằng -pr (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 là thứ tự các tùy chọn quan trọng). - pms
Đối với một số lý do /path dường như liên quan đến userS $HOME - làm thế nào để làm cho nó tuyệt đối mà không bị root@? - Jonathan
Yeah, SCP không bao giờ đặt các tập tin mà tôi muốn. Thường thì khi cố gắng thay thế một thư mục, tôi bằng cách nào đó kết thúc bằng một thư mục khác bên trong nó với cùng tên. Tôi cẩn thận hơn với điều này. - sudo


Mặc dù các câu trả lời trước đó về mặt kỹ thuật chính xác, bạn cũng nên cân nhắc sử dụng rsync thay thế. rsync so sánh dữ liệu trên các mặt 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 thứ gì đó vào máy từ xa nhiều lần, hãy sử dụng rsync. Trên thực tế, rất tốt để sử dụng rsync mọi lúc bởi 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 chạy scp và sao chép mọi thứ mọi lúc.

Cũng thế, rsync cho phép bạn khôi phục 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 nên khá nhiều là một thay thế thả.


149
2018-04-29 05:11



"không có dữ liệu nào sẽ được chuyển" ngoại trừ, tất nhiên, dữ liệu cần thiết để xác định chính xác những gì đã hoặc chưa thay đổi. - thsutton
Ha yeah tôi đã hiểu rõ hơn một chút. Chúng ta không nói đến sự vướng víu lượng tử ở đây. - Phil Hollenback
nó rất buồn mà osx, win7 và thậm chí không ubuntu sử dụng một cái gì đó như rsync cho GUI của họ được nêu ra. - cregox
dmourati Tôi đã trả lời câu hỏi của anh ấy. Tôi đã nói với anh ta một cách tốt hơn để làm điều đó. - Phil Hollenback
@raphnguyen: không, xóa các tập tin từ thư mục địa phương sẽ không xóa chúng khỏi thư mục từ xa. Bạn có thể bật hành vi này bằng --delete tùy chọn rsync. - Phil Hollenback


Đó là những gì -r tùy chọn là cho. :)

Xem scp man page để biết thêm thông tin nếu cần.


30
2018-04-29 04:27





Tùy chọn sao chép đệ quy '-r' (chữ thường)

scp -r

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

9
2017-09-11 17:53



Tôi chỉ muốn chỉ ra sự khác biệt giữa cp và scp là -r và -R không giống nhau. unix.stackexchange.com/questions/18712/… - Tarun


Cách tốt nhất là sử dụng rsync qua SSH

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

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

Các tùy chọn ưa 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 cả việc giữ liên kết tượng trưng)
  • -z: nén
  • -v: verbose: hiển thị tệp
  • -P: hiển thị progess dưới dạng 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
  • --xóa: xóa các tệp ở đích không còn trong nguồn

4
2017-11-05 18:33



Tất cả các phiên bản của rsync mà tôi đã sử dụng sẽ sử dụng ssh theo mặc định, vì vậy -essh không cần thiết. Và sự 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. - kasperd


Sau khi tìm kiếm cờ sao chép đệ quy và đã sử dụng thành công nhờ vào bài đăng này, tôi chỉ muốn đăng một đề xuất.

Nếu trường hợp đó là bạn đang sao chép (đệ quy) một thư mục. Có thể 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


3
2018-06-06 18:00



phần mở rộng tệp phải là .tar.gz hoặc là .tgz kể từ khi tập tin là một kho lưu trữ tar gzipped (kể từ khi -z cờ được sử dụng). - anthonybell


Bạn có thể đệ quy sao chép một thư mục vào một kho lưu trữ nén với 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 đến ~/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ể giải nén tập tin trên hệ thống đích bằng cách sử dụng đườ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 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

Mặc dù để phản chiếu một thư mục, bạn có thể nên sử dụng rsync...


1
2018-01-06 07:20





Nếu bạn muốn chuyển mật khẩu của người dùng dưới dạng tham số thay vì nhập thông tin 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

0
2018-01-06 06:49





Một tùy chọn khác (có thể tốt hơn để sử dụng lặp lại) là sử dụng NFS - hãy kiểm tra nfs-kernel-server và cách thiết lập các chia sẻ NFS.


-2
2017-08-11 22:08



Điều này hoàn toàn vô nghĩa. Có vô số trường hợp bạn sẽ sử dụng scp nhưng NFS không phải là một lựa chọn. - Sven♦