Làm thế nào để tiếp tục scp với các tệp được sao chép một phần? [đóng cửa]


97

Tôi sử dụng lệnh scp shell để sao chép thư mục lớn của tệp.

Nhưng tại một số thời điểm, tôi phải bỏ lệnh đang chạy (bằng Ctrl + C hoặc kill).

Theo hiểu biết của tôi, các tệp scp được sao chép tuần tự, vì vậy chỉ nên có một tệp được sao chép một phần.

Làm cách nào để tiếp tục lệnh scp tương tự để không ghi đè lên các tệp đã sao chép thành công và xử lý đúng các tệp đã sao chép một phần?

Tái bút Tôi biết tôi có thể thực hiện loại công cụ này trong rsync, nhưng vì lý do nào đó scp nhanh hơn đối với tôi và tôi sử dụng nó để thay thế.


4
Tôi nghi ngờ rsync chậm hơn vì nó dành thêm thời gian để làm những việc cho phép bạn bắt đầu lại quá trình chuyển. Bạn có thể cân nhắc chỉ sử dụng rsync để hoàn tất quá trình chuyển một phần.
Keith Thompson

2
Nếu bạn muốn được thông minh, bạn luôn có thể thử ddvới một hợp skipbiến và ống để ssh:)
Đánh dấu Nunberg

1
Đây là chủ đề cho SO. Nó thuộc về SuperUser, và thực sự đã được hỏi ở đó .
Dan Dascalescu

Câu trả lời:


183

Bạn nên sử dụng rsynchếtssh

rsync -P -e ssh remoteuser@remotehost:/remote/path /local/path

Tùy chọn chính là -P, giống như--partial --progress

Các tùy chọn khác, chẳng hạn như -a(cho chế độ lưu trữ) và -z(cho phép nén) cũng có thể được sử dụng.

Hướng dẫn sử dụng: https://download.samba.org/pub/rsync/rsync.html


43
Chỉ muốn lưu ý rằng rsync sẽ tiếp tục sao chép hàng loạt bắt đầu bằng scp.
Craig Anderson

6
Bạn sẽ nhận được "thư mục đang bỏ qua". lỗi, trừ khi bạn cũng chỉ định -r. Nguồn: lucasb.eyer.be/snips/rsync-skipping-directory.html
Artur Czajka

4
Làm việc cho tôi, nhưng tôi đã thêm --append nữa .... rsync -P --append -e ssh remoteuser @ remotehost: / remote / path / local / path
cnd

1
@CraigAnderson đó là điểm quan trọng đã bị bỏ qua. Câu trả lời có vẻ như nó cho thấy việc tải xuống nên bắt đầu bằng rsync để bắt đầu.
Willa

1
Các tùy chọn được đưa ra trong câu trả lời không làm việc cho tôi, nhưng điều này đã làm:rsync -P -rsh remoteuser@remotehost:/remote/path /local/path
Bunny Rabbit

26

Một thay thế cho rsync:

Sử dụng sftpvới tùy chọn -r(đệ quy sao chép toàn bộ thư mục) và tùy chọn -acủa sftp's getlệnh để tiếp tục chuyển một phần các tập tin hiện có.

Điều kiện tiên quyết: Việc sftptriển khai của bạn đã get-atùy chọn với .

Thí dụ:

Sao chép thư mục /foo/bartừ máy chủ từ xa vào thư mục hiện tại cục bộ của bạn. Thư mục barsẽ được tạo trong thư mục hiện tại cục bộ của bạn.

echo "get -a /foo/bar" | sftp -r server

4
Giải pháp của bạn thật tuyệt vì máy chủ của tôi không cho phép đăng nhập bằng ssh, vì vậy rsync không hoạt động. Tôi cần phải tải lên thay vì tải vì vậy đây là lệnh của tôi:echo "put -a foo/bar" | sftp -r server:/foo
Carlos Rafael Ramirez

1
Đây có vẻ là lựa chọn khả thi để tiếp tục các tệp đã tải xuống một phần, vì rsync dường như không thân thiện với ssh nhiều (với các cổng không phải mặc định).
codezombie

11

Kể từ OpenSSH 6.3, bạn có thể sử dụng regetlệnh trong sftp.

Nó có cùng một cú pháp với get, ngoại trừ việc nó bắt đầu chuyển từ phần cuối của một tệp cục bộ hiện có.


6

Một khả năng khác là cố gắng cứu vãn scp bạn đã bắt đầu khi nó ngừng hoạt động.

ctrl + z để chạy nền và dừng nó, sau đó chuyển sang máy chủ nhận và đăng nhập, sau đó thoát. Bây giờ fg quá trình scp và xem nó tiếp tục từ 'bị đình trệ'!


Đã làm việc cho tôi trên Mac OS X. Cảm ơn bạn đã đăng bài này, nó đã cứu tôi thịt xông khói hôm nay!
Ben Hitchcock

1

Khi rsync ngừng hoạt động sau vài giây khi ban đầu chạy tốt, tôi đã kết thúc với giải pháp bạo lực sau:

cat run_me.sh
#!/bin/bash
while [ 1 ]
do
  rsync --partial --progress --rsh=ssh user@host:/path/file.tgz file.tgz &
  TASK_PID=$!
  sleep 60
  kill $TASK_PID
  sleep 2
done

1

Bạn có thể tận dụng các -rsh-Ptùy chọn của rsync. -Plà để tải xuống một phần và-rsh cho biết quá trình truyền đã qua ssh procotol.

Lệnh hoàn chỉnh sẽ là: rsync -P -rsh remoteuser@remotehost:/remote/path /local/path


-5

Tôi đã gặp vấn đề tương tự ngày hôm qua, chuyển một bãi chứa sql lớn qua scp, tôi đã may mắn với wget --continue the_url

Bài đăng trên blog đó giải thích nó khá tốt http://www.cyberciti.biz/tips/wget-resume-broken-download.html


Đây được coi là phương pháp hay nhất để sao chép các phần có liên quan từ url vào câu trả lời trong trường hợp trang web ngừng hoạt động.
Ryre

Tôi đang cố gắng tải lên, vì vậy đừng quên cho tôi.
Rolf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.