Saya memiliki direktori dengan log kerusakan, dan saya ingin menggunakan pernyataan kondisional dalam skrip bash berdasarkan perintah find.
File log disimpan dalam format ini:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Saya ingin pernyataan if hanya mengembalikan true jika ada crash log untuk aplikasi tertentu yang telah dimodifikasi dalam 5 menit terakhir. The findperintah yang saya akan gunakan adalah:
find /var/log/crashes -name app-\*\.log -mmin -5
Saya tidak yakin bagaimana memasukkannya ke dalam ifpernyataan dengan benar. Saya pikir ini mungkin berhasil:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Ada beberapa area di mana saya tidak jelas:
- Saya telah melihat bendera if tapi saya tidak yakin yang mana, jika ada, yang harus saya gunakan.
- Apakah saya memerlukan
testarahan atau haruskah saya hanya memproses terhadap hasil perintah find secara langsung, atau mungkin menggunakanfind... | wc -luntuk mendapatkan jumlah baris sebagai gantinya? - Tidak 100% diperlukan untuk menjawab pertanyaan ini, tetapi
testapakah untuk pengujian terhadap kode kembali yang memerintahkan pengembalian? Dan mereka agak tidak terlihat - di luarstdout/stderr? Saya membacamanhalaman tersebut tetapi saya masih belum jelas kapan harus digunakantestdan bagaimana cara men-debug-nya.
... -exec command ';' -quit, tetapi saya tidak percaya ada solusi untuk yang terakhir selain mengurai hasilnya. Juga, dalam kedua kasus, masalah utama dengan parsing hasil find(yaitu ketidakmampuan untuk membedakan pembatas dari karakter dalam nama file) tidak berlaku, karena Anda tidak perlu menemukan pembatas dalam kasus ini.
find ... -exec. Juga lihat contoh perintah di bawah Mengapa mengulangi hasil praktik buruk?