Câu trả lời:
Bạn có thể thử cách chấp nhận sau: thay vì scp sử dụng dd để bỏ qua phần đã tải xuống và nối phần còn lại vào tệp.
sofar=`ls -l ./destfile | awk '{print $5}'`
ssh rsys "dd if=./srcfile bs=1 skip=$sofar" >> ./destfile
Tối ưu hóa có thể: làm việc với các khối lớn. Hãy để nó như một bài tập về nhà.
dd
với khối nhỏ có thể chậm (chỉ 350 kB / s ở đây). May mắn thay, scp
chuyển dường như đến trong khối 1024 byte. Nếu vậy đối với tệp của bạn (hoặc cách khác, bằng cách cắt nó thành khối 1024 byte gần nhất), bạn có thể tăng tốc nó như thế này : ssh rsys "dd if=./srcfile bs=1024 skip=$sofar" >> ./destfile
. (Lưu ý rằng $sofar
sau đó phải là số lượng khối 1024 byte để bỏ qua!)
rsys
trong dòng thứ hai chỉ là một tên máy chủ ví dụ không phải là một đối số đặc biệt ssh
. Tôi đề nghị bạn thay thế nó user@host
để tránh nhầm lẫn.
Với scp
, không.
Nếu cả hai đầu đều có nó, bạn có thể sử dụng rsync -LvzP remoteserver:path/to/file localfile
để chuyển một tệp duy nhất.
Vâng, có nhiều cách để tiếp tục từ điểm bị gián đoạn, nhưng không thể sử dụng scp. sftp reget filename
làm những gì bạn cần. Yarek và Grawity đã cung cấp các giải pháp hợp lệ mà tôi +1 cho cả hai, nhưng để tiếp tục từ một điểm bị gián đoạn, tôi thích rsync. Các lệnh ví dụ được cung cấp cả hai giả sử bạn đang truy xuất một tệp từ máy chủ từ xa đến máy trạm cục bộ (đang tải xuống). Xin lưu ý rằng hai tham số cuối cùng phải được coi là source_file và target_file theo thứ tự đó. Cú pháp của tên tệp thay đổi dựa trên việc tệp nguồn hoặc tệp đích là cục bộ hay từ xa. Nếu tôi đang gửi (tải lên) tệp [văn bản], tôi sẽ viết lại các ví dụ được cung cấp dưới dạng:
# Từ địa phương đến từ xa sofar = `ssh remote_system ls -l interted_file | awk '{in $ 5}' `; dd if = source_file bs = 1 Skip = $ sofar | ssh remote_system "mèo >> ./interrupted_file"
Và với giải pháp rsync, tôi thêm vào -e ssh
. Bạn nên xem xét liệu bạn có cần độ dài, nén, giữ quyền sở hữu, quyền, dấu thời gian, thư mục recurse, v.v. Kiểm tra trang man và google, liên quan đến tham số -L. Bạn có thể muốn các liên kết tượng trưng vẫn là liên kết thay vì tham chiếu chúng.
rsync -P -e ssh local_source_file remoteserver:path/to/interrupted_target_file
scp -o ConnectTimeout 60
Cho phép bạn chỉ định thời gian chờ cho một kết nối. Có thể giữ kết nối của bạn khỏi chia tay.
Có, nếu cả hai kết thúc hỗ trợ sftp - sau khi scp remoteuser@remotehost:/absolute/filename .
thất bại, bạn có thể tiếp tục bằng cách thực hiện sftp remoteuser@remotehost
và sau đó reget /absolute/filename
tiếp tục tải xuống.