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 find
perintah yang saya akan gunakan adalah:
find /var/log/crashes -name app-\*\.log -mmin -5
Saya tidak yakin bagaimana memasukkannya ke dalam if
pernyataan 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
test
arahan atau haruskah saya hanya memproses terhadap hasil perintah find secara langsung, atau mungkin menggunakanfind... | wc -l
untuk mendapatkan jumlah baris sebagai gantinya? - Tidak 100% diperlukan untuk menjawab pertanyaan ini, tetapi
test
apakah untuk pengujian terhadap kode kembali yang memerintahkan pengembalian? Dan mereka agak tidak terlihat - di luarstdout
/stderr
? Saya membacaman
halaman tersebut tetapi saya masih belum jelas kapan harus digunakantest
dan 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?