Tôi có một tập lệnh sử dụng rsync để đồng bộ hóa dữ liệu trong một điều khiển từ xa -> cục bộ. Ngay sau khi lệnh rsync được chạy, hãy kiểm tra xem mã lỗi có bằng 0 hay không. Nếu số 0 của nó, các lệnh tiếp theo được thực hiện. Tuy nhiên, điều này không tính đến thực tế là rsync có thể đã chạy thành công nhưng thực tế không thực hiện bất kỳ thay đổi nào. Bởi vì điều này, điều kiện bằng không sẽ chạy bất kể, đó là một chút dư thừa.
rsync -aEivm --delete /path/to/remote/ /path/to/local/
if [ $? -eq 0 ]; then
# Success do some more work!
else
# Something went wrong!
exit 1;
fi
Điều gì sẽ là cách tiếp cận tốt nhất để mở rộng điều này để kiểm tra xem thực sự có bất kỳ thay đổi nào dựa trên lệnh rsync đã chạy hay không. Tôi đã đọc rằng cờ -i có thể cung cấp đầu ra cho thiết bị xuất chuẩn, nhưng làm thế nào để đặt nó trong một khối có điều kiện?
a=$("rsync command")
. Điều này sẽ thực thi rsync
lệnh và lưu trữ stdout
trong a
. Sau đó, bạn có thể chạy thử nghiệm trêna
| grep /
hoặc một cái gì đó tương tự, sau đó kiểm tra trạng thái thoát của grep với $?
, nó sẽ là 1 nếu không có đầu ra.
-v
vào đó, vì vậy nó đã cung cấp thông tin bạn cần để xuất bản ... ví dụ: danh sách các tệp thực sự được gửi. Nếu không có gì thay đổi, đó chỉ là./
.