ฉันมีไดเรกทอรีที่มีบันทึกข้อผิดพลาดและฉันต้องการใช้คำสั่งแบบมีเงื่อนไขในสคริปต์ทุบตีตามคำสั่งค้นหา
ไฟล์บันทึกจะถูกจัดเก็บในรูปแบบนี้:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
ฉันต้องการให้คำสั่ง if ส่งคืนจริงถ้ามีบันทึกการทำงานล้มเหลวสำหรับแอปเฉพาะซึ่งได้รับการแก้ไขใน 5 นาทีที่ผ่าน findคำสั่งที่ผมจะใช้เป็น:
find /var/log/crashes -name app-\*\.log -mmin -5
ฉันไม่แน่ใจว่าจะรวมเข้ากับifคำสั่งได้อย่างถูกต้อง ฉันคิดว่านี่อาจใช้งานได้:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
มีบางพื้นที่ที่ฉันไม่ชัดเจน:
- ฉันดูที่ธง ifแต่ฉันไม่แน่ใจว่าควรใช้อันไหนถ้ามี
- ฉันต้องการ
testคำสั่งหรือฉันควรประมวลผลผลลัพธ์ของคำสั่ง find โดยตรงหรืออาจใช้find... | wc -lเพื่อรับจำนวนบรรทัดแทน - ไม่จำเป็น 100% ที่จะตอบคำถามนี้ แต่
testสำหรับการทดสอบกับโค้ดส่งคืนที่คำสั่งส่งคืน? และพวกมันมองไม่เห็น - ด้านนอกของstdout/stderr? ฉันอ่านmanหน้านี้แล้ว แต่ฉันก็ยังไม่ค่อยชัดเจนเกี่ยวกับเวลาที่ใช้testและวิธีแก้ไขข้อบกพร่อง
... -exec command ';' -quitแต่ฉันไม่เชื่อว่าจะมีวิธีการแก้ปัญหาอื่น ๆ นอกเหนือจากการแยกผลลัพธ์ นอกจากนี้ในทั้งสองกรณีปัญหาหลักของการแยกวิเคราะห์ผลลัพธ์ของfind(เช่นไม่สามารถแยกตัวคั่นจากอักขระในชื่อไฟล์) ไม่ได้ใช้เนื่องจากคุณไม่จำเป็นต้องค้นหาตัวคั่นในกรณีเหล่านี้
find ... -execกรณีที่มีการใช้งาน ดูคำสั่งตัวอย่างภายใต้เหตุใดการวนซ้ำของแนวปฏิบัติของผลลัพธ์ของ find