Câu trả lời:
Bạn có thể sử dụng rsync
cho nó. rsync
được thực sự thiết kế cho loại hình hoạt động này.
Cú pháp:
rsync -avh /source/path/ host:/destination/path
hoặc là
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
Khi bạn chạy nó lần đầu tiên, nó sẽ sao chép tất cả nội dung sau đó nó sẽ chỉ sao chép các tệp mới.
Nếu bạn cần đường hầm lưu lượng truy cập thông qua kết nối SSH (ví dụ: vì mục đích bảo mật), như được chỉ ra bởi ban đầu bạn yêu cầu giải pháp dựa trên SCP, chỉ cần thêm -e ssh
vào các tham số rsync
. Ví dụ:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "Điều này sẽ chuyển tất cả các tệp khớp với mẫu * .c từ thư mục hiện tại sang thư mục src trên máy foo. Nếu bất kỳ tệp nào đã tồn tại trên hệ thống từ xa thì rsync remote- cập nhật giao thức được sử dụng để cập nhật tệp bằng cách chỉ gửi những khác biệt "
rsync -avuzh /source/path/ host:/destination/path
. Điều đó thực hiện toàn bộ công việc trong một lệnh và trong các lệnh tiếp theo, chỉ chuyển các tệp cần nó.
Nếu bạn muốn gắn bó với scp vì bất kỳ lý do gì, bạn có thể xóa quyền w trên dữ liệu cục bộ của mình (nếu bạn có quyền làm điều đó) và scp sẽ không chạm vào nó. Để được chính xác hơn:
chmod a-w local/*.tar.gz
(trong thư mục địa phương của bạn)scp remote/*.tar.gz local
Điều này không hiệu quả lắm, tốt đẹp nhưng có thể giúp ích nếu bạn cần một giải pháp tạm thời nhanh chóng mà không thay đổi thành thứ gì khác ngoài scp. (Kudos: scp mà không thay thế các tệp hiện có ở đích )
Không có câu trả lời chính xác về cách thực hiện điều này với SCP, vì đó là những gì câu hỏi ban đầu đang hỏi.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
Khi hoàn tất việc sao chép các tệp sẽ thay đổi các quyền trở lại:
sudo chmod a+w -R /files
--ignore-existing
thực sự cần thiết?