2009-01-04 26 views
5

Tôi có kịch bản bash này chạy sao lưu của tôi vào một ổ cứng gắn ngoài ... chỉ khi ổ đĩa được gắn kết (OS X):Tôi làm cách nào để yêu cầu rsync chỉ chạy nếu thư mục đích tồn tại?

DIR=/Volumes/External; 
if [ -e $DIR ]; 
then rsync -av ~/dir_to_backup $DIR; 
else echo "$DIR does not exist"; 
fi 

này hoạt động, nhưng tôi cảm nhận được tôi đang hiểu sai trang rsync người đàn ông. Có tùy chọn rsync tích hợp để hủy bỏ chạy nếu thư mục đích cấp cao nhất không tồn tại không? Nếu không kiểm tra sự tồn tại của/Volumes/External, một thư mục sẽ được tạo bởi tên đó nếu nó chưa được gắn kết.

Trả lời

3

Hai cờ trông giống như những gì bạn đang tìm kiếm:

--existing, --ignore-non-existing 

Từ trang người đàn ông:

--existing, --ignore-không tồn tại
này cho rsync để bỏ qua việc tạo tệp (bao gồm các thư mục) chưa tồn tại trên đích. Nếu tùy chọn này được kết hợp với tùy chọn --ignore-existing, sẽ không có tệp nào được cập nhật (có thể hữu ích nếu tất cả những gì bạn muốn làm là xóa các tệp không liên quan).

+0

với - hiện tại, thư mục mới của mình trong hệ thống phân cấp nguồn sẽ không bao giờ được tạo trên ổ đĩa sao lưu ... – mjy

+1

Có những tùy chọn này dường như không hoạt động theo cách tôi muốn. Ngay cả khi chạy hủy bỏ vì dir đích không tồn tại, thư mục đích được tạo ra (mặc dù cây không được sao chép vào). – Marcus

2

AFAIK không có, nhưng bạn có thể mô phỏng các behavour với một dấu gạch chéo:

rsync -av dir_to_backup /Volumes/External/;

Nó sẽ thoát với một lỗi nếu thư mục không tồn tại (mà có thể hoặc không thể được mong muốn) .

Ngoài ra, bạn luôn có thể tối ưu hóa đi nếu:

test -e $DIR && rsync -av ...

+1

Tôi không tìm thấy tuyên bố đầu tiên là đúng sự thật. Thư mục được tạo bất kể dấu gạch chéo. Tôi thích tối ưu hóa vỏ cho kiểm tra sự tồn tại, ngoại trừ tôi muốn một số đầu ra lỗi nếu thư mục không tồn tại, vì vậy tôi có lẽ sẽ giữ cho nó tiết. – Marcus

1

Không, dường như không có bất kỳ tùy chọn như vậy, như xa như tôi có thể nhìn thấy từ manpage.

Các vấn đề liên quan