Saat ini saya menggunakan rsync
pada skrip yang menyebarkan aplikasi PHP dari pementasan ke server produksi. Begini caranya:
rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
Ini saat ini mengeluarkan daftar setiap file yang sedang dibandingkan (setiap file dalam proyek), tapi saya ingin itu hanya menampilkan yang dimodifikasi, jadi saya bisa menjalankannya dengan --dry-run
opsi untuk memeriksa bahwa setiap penyebaran hanya memperbarui file yang diinginkan.
CATATAN: Yang terbaik yang bisa saya lakukan sejauh ini adalah grep fcst
hasilnya, tetapi saya sedang mencari rsync
opsi yang saya yakin ada di sana tetapi saya tidak dapat menemukannya di halaman manual.
Terima kasih sebelumnya!
-P
untuk kemajuan melakukan hal itu dalam-n
pengaturan dryrun, meskipun-i
tidak salah juga. Lihat jawaban saya di bawah ini.Gunakan
--out-format
opsiMenurut halaman manual:
Jika Anda hanya memerlukan nama file aktual (
--out-format="%n"
), perintah jalankan Anda mungkin terlihat seperti:rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/
Ketika rsync dipanggil dengan
-v
, ia menggunakan opsi ini secara internal dengan format default"%n%L"
, yang memberi tahu Anda hanya nama file dan, jika itemnya adalah tautan, di mana ia menunjuk.Tetapi ini juga termasuk ringkasan singkat di awal dan di akhir proses sinkronisasi.
Untuk menghilangkan ringkasan itu, gunakan
--out-format
opsi secara langsung.Btw.
-i
juga menggunakan internal--out-format
, tetapi dengan format"%i %n%L"
.sumber
Dimulai dengan rsync v3.1.0, dirilis pada 2013, ada
--info
flag yang memungkinkan kontrol yang baik atas output.--info
Bendera yang tersedia adalah:sumber
Tidak yakin apakah ini berbeda antara versi / opsi yang digunakan tetapi dalam versi saya ketika saya menggunakan
-i
opsi saya mendapatkan daftar seperti:Jadi solusi sederhana untuk mendapatkan hanya daftar file yang benar-benar ditransfer cukup jalankan:
Ini hanya akan menyembunyikan semua baris yang mengandung
f..T......
. Jadi secara efektif ini akan menyembunyikan file yang identik.sumber
Sebenarnya, Anda semacam menjawab pertanyaan Anda sendiri, karena perintah awal Anda sudah memilikinya:
--progress
Ini adalah opsi yang benar, meskipun halaman manual sedikit samar tentangnya:
Ini agak masuk akal, karena Anda memanggil
rsync
string Anda dengan mode dryrun, tidak ada transer terjadi, tetapi Anda masih akan mengalami kemajuan: yaitu file yang telah berubah dan akan ditransfer.Dengan cara ini Anda mendapatkan daftar kecil yang rapi dari semua file, misalnya:
Tujuan sudah memiliki salinan file perubahan yang telah diperbarui di sumber dan file lama, yang tetap tidak berubah. Sumber juga memiliki file tambahan: newfile.
Jika kami menjalankan perintah rsync Anda, tetapi hapus itemisasi
-i
dan tambahkan dryrun-n
Anda mendapatkan daftar hanya file rsync yang akan dikirimkan: filefile dan filefile.
sumber