Saya memiliki skrip yang menggunakan rsync untuk menyinkronkan data dalam skenario lokal - jauh. Segera setelah perintah rsync dijalankan, centang untuk melihat apakah kode kesalahan sama dengan nol atau tidak. Jika nol, perintah lebih lanjut dilakukan. Namun ini tidak memperhitungkan fakta bahwa rsync mungkin telah berjalan dengan sukses tetapi tidak benar-benar membuat perubahan. Karena ini kondisi nol sama akan berjalan terlepas, yang sedikit berlebihan.
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
Apa yang akan menjadi pendekatan terbaik untuk memperluas ini untuk memeriksa apakah sebenarnya ada perubahan berdasarkan perintah rsync yang berjalan. Saya telah membaca bahwa flag -i dapat memberikan output ke stdout, tetapi bagaimana ini bisa ditempatkan di blok bersyarat?
shell-script
files
rsync
James White
sumber
sumber
-v
ke sana, sehingga sudah menyediakan informasi yang Anda butuhkan untuk stdout ... misalnya, daftar file yang sebenarnya dikirim. Jika tidak ada yang berubah, itu baru saja./
.a=$("rsync command")
. Ini akan menjalankanrsync
perintah dan menyimpanstdout
dia
. Kemudian Anda dapat menjalankan tes padaa
| grep /
atau sesuatu seperti itu, lalu periksa status keluar dari grep$?
, itu harus 1 jika tidak ada output.Jawaban:
Berdasarkan komentar pada pertanyaan awal saya, buat output rsync untuk stdout dengan flag -i dan gunakan kondisi pemeriksaan non-string untuk melihat apakah ada yang benar-benar berubah dalam pemeriksaan kode kesalahan. Membungkus perintah rsync dalam sebuah variabel memungkinkan pemeriksaan dilakukan.
Potensi downside, Anda harus kehilangan output verbose, tetapi Anda selalu dapat mencatatnya sebagai file.
sumber
Saya menginginkan solusi yang lebih ketat. Saya tidak ingin menerima
Number of created files:
(pesannya bisa dalam bahasa lain) atau menghapus semua baris tetapi dua di-v
output (siapa yang tahu ringkasan apa yangrsync
akan dicetak dalam versi berikutnya?).Saya menemukan bahwa Anda dapat mengatur format
rsync
log, tetapi bukan format stdout-nya (lihatman rsyncd.conf
).Misalnya, tambahkan "File berubah!" ke setiap baris dengan file yang benar-benar berubah, dan kemudian
grep
untuk itu:sumber