Làm cho scp luôn ghi đè hoặc tạo thư mục


26

Tôi đang sử dụng scp để sao chép một thư mục từ một máy chủ từ xa sang một thư mục mới (IE chỉ thay đổi tên) trên một máy chủ từ xa khác như:

scp -prq server1:dir1 server2:dir2

Điều này hoạt động tốt nếu dir2 không tồn tại trên server2, nó tạo ra một thư mục mới gọi là dir2 chứa mọi thứ từ dir1 trên server1.

Vấn đề xảy ra khi dir2 đã tồn tại trên server2 (LƯU Ý: Tôi không có cách nào biết trước điều này hoặc thực hiện xóa trên dir2 trên server2 trước đó) - điều gì xảy ra là tôi nhận được một bản sao của dir1, được gọi là dir1, trong dir2.

Tôi chắc chắn có một cái gì đó cơ bản tôi đang thiếu, nhưng tôi dường như không thể giải quyết nó.

Bất kỳ trợ giúp nhiều đánh giá cao!

Trân trọng,

Giles

Được rồi, tôi có ít hơn 10 đại diện và không thể là ar $ ed để đợi 8 giờ vì vậy đây là những gì tôi nhận được:

Đây là một kịch bản phù hợp với tôi:

#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null  2>&1

if [ "$?" -ne "0" ]; then
        echo "failed ... trying method 2"
        scp -prq server1:dir1 server2:dir2
fi

exit

Vẫn không chắc chắn làm thế nào để làm điều này trong một lệnh hoặc thậm chí nếu có thể.

Chúc mừng @mindthemonkey, đôi khi chỉ cần có được một quan điểm mới mẻ có thể giúp chỉ đường.


Bạn có quyền truy cập scp nhưng không ssh?
Matt

Điều đó là chính xác
Giles

Vấn đề duy nhất là bạn sẽ thử bản sao thứ hai cho bất kỳ lỗi nào, không nhất thiết là dir2 không tồn tại. Có lẽ nếu bạn có thể đưa ra một bài kiểm tra mà hầu như không có gì (giả sử sao chép một thư mục trống). Sau đó, dựa trên đầu ra hoặc chạy scp1 hoặc scp2
Matt

Điểm hay, tôi sẽ ghi nhớ điều đó trong tương lai và đăng lại nếu tôi nghĩ ra thứ gì đó.
Giles

Bạn có thể sftp? sau đó kiểm tra đầu ra của a cd dir2.
Matt

Câu trả lời:


34

Sử dụng cú pháp "chấm" này:

scp -prq server1:dir1/. server2:dir2/

Điều này sao chép nội dung của thư mục đó, chứ không phải chính thư mục. Và tôi tin rằng nó dễ mang theo hơn là toàn cầu *.


2
-p "Duy trì thời gian sửa đổi, thời gian truy cập và chế độ từ tệp gốc." -r "Sao chép toàn bộ thư mục." -q "Vô hiệu hóa đồng hồ đo tiến độ." Nguồn: computerhope.com/unix/scp.htm
kr85 16/03/18

1
Điều này cho tôi một lỗi:scp: error: unexpected filename: .
Andrew Koster

1

Thông thường để kiểm soát việc tạo thư mục, bạn cần sử dụng một dấu vết /để ngụ ý một đường dẫn hoàn chỉnh nhưng tôi nghĩ điều này sau đó sẽ không tạo được thư mục nếu nó không tồn tại:

scp -prq server1:dir1/* server2:dir2/

Điều này cũng có thể bỏ lỡ ẩn. các tệp do mở rộng toàn cầu * (không có một số công việc cụ thể về vỏ )

Bạn có thể tiếp cận nó khác với sshtar.

ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"

Nhưng điều này có nghĩa là lưu lượng truy cập thông qua máy cục bộ của bạn.


scp -prq server1: dir1 / * server2: dir2 /
Giles

@Giles bạn đang nói rằng nó không hoạt động?
Matt

1
Điều lạ là tôi đã chỉnh sửa nhưng nó đã bị mất - không, điều đó không hoạt động, nếu thư mục không tồn tại thì scp sẽ báo lỗi. Ngoài ra tôi không có sẵn ssh trong trường hợp cụ thể này (vấn đề với quyền người dùng). Tuy nhiên, điều này cho tôi một ý tưởng, vì tôi đang thực hiện điều này trong một kịch bản, tôi có thể thử ở trên, nắm bắt bất kỳ lỗi nào và, do lỗi, hãy thử phiên bản cơ bản từ bài đăng đầu tiên của tôi. Cảm ơn sự giúp đỡ @mindthemonkey
Giles

1
Nó báo lỗi 'Là một thư mục' khi thư mục đích không tồn tại đối với tôi.
Matt

1
Vâng, tôi cũng vậy, một loại lỗi lẻ cho thư mục không tồn tại.
Giles
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.