ฉันมีไดเรกทอรีที่มีบันทึกข้อผิดพลาดและฉันต้องการใช้คำสั่งแบบมีเงื่อนไขในสคริปต์ทุบตีตามคำสั่งค้นหา
ไฟล์บันทึกจะถูกจัดเก็บในรูปแบบนี้:
/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