Linux มีอินเทอร์เฟซที่ดีสำหรับการตรวจสอบเหตุการณ์ของระบบไฟล์ทั้งหมดเช่นการสร้างการแก้ไขการลบไฟล์ อินเทอร์เฟซคือinotify
ตระกูลของการเรียกใช้ระบบยูทิลิตี้ userspace ที่ใช้ประโยชน์จากการโทรเหล่านี้จัดทำโดยinotify-tools
แพคเกจใน Ubuntu (มีอยู่ในที่เก็บจักรวาล) หากคุณยังไม่มีให้ติดตั้งโดย:
sudo apt-get install inotify-tools
inotify-tools
ให้inotifywait
และinotifywatch
ไบนารีเราต้องการคนแรก
ดังนั้นคุณต้องการเรียกใช้คำสั่งasciidoctor -q some_file
เมื่อ.adoc
มีการแก้ไขไฟล์ใด ๆ( some_file
จะถูกแทนที่ด้วย) หากสมมติว่า.adoc
ไฟล์ของคุณอยู่ในไดเรกทอรี/foo/bar
คุณสามารถตั้งค่าการตรวจสอบ:
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc
-q
เปิดใช้งานโหมดเงียบไม่มีข้อมูลจากinotifywait
ตัวเอง
-m
เปิดใช้งานโหมดจอภาพมิฉะนั้นจะออกหลังจากเหตุการณ์แรก
--event modify
เราสนใจเฉพาะmodify
เหตุการณ์เช่นเมื่อไฟล์ถูกแก้ไข ค่าที่เป็นไปได้อื่น ๆ ได้แก่open
, close
ฯลฯ
--format %w
เราต้องการแค่ชื่อไฟล์ที่ถูกแก้ไขแทนที่จะเป็นมัดข้อมูลอื่น ๆ เพราะเราจะใช้ชื่อไฟล์เป็นอินพุตไปยังคำสั่งอื่น
/foo/bar/*.adoc
จะถูกขยายเป็น.adoc
ไฟล์ทั้งหมดภายใต้/foo/bar
ไดเรกทอรี
ตอนนี้ข้างต้นจะแสดงชื่อไฟล์ของคุณเมื่อใดก็ตามที่มีการแก้ไขใด ๆ ตอนนี้ให้เรียกใช้คำสั่งในชื่อไฟล์ (สมมติว่าคำสั่งใช้อาร์กิวเมนต์ผ่าน STDIN):
inotifywait -qm --event modify --format '%w' /foo/bar/*.adoc | asciidoctor -q
คุณยังสามารถตั้งค่านาฬิกาแบบเรียกซ้ำในไดเรกทอรีจากนั้นคุณจะต้องใช้grep
เพื่อกรองไฟล์ที่ต้องการเท่านั้น ที่นี่การตั้งค่านาฬิกาซ้ำ ( -r
) ในไดเรกทอรี/foo/bar
และใช้grep
ในการกรอง.adoc
ไฟล์เท่านั้น:
inotifywait -qrm --event modify --format '%w%f' /foo/bar | grep '\.adoc$' | asciidoctor -q
เมื่อดูไดเรกทอรีตัวระบุรูปแบบผลลัพธ์%w
จะเปลี่ยนเป็นชื่อไดเรกทอรีดังนั้นเราจำเป็นต้อง%f
ได้รับชื่อไฟล์ ในขณะที่ดูไฟล์%f
จะแก้ไขเป็นสตริงว่าง
โปรดทราบว่าคุณยังสามารถเรียกใช้inotifywait
ใน-d
โหมดdaemon ( ) คุณยังสามารถเขียนสคริปต์ทั้งหมดและ / หรือทำงานในพื้นหลังและ / หรือเล่นกับตัวเลือกอื่น ๆ
นอกจากนี้คุณสามารถแทนที่asciidoctor
ด้วยคำสั่งอื่น ๆ ที่คุณเลือกหากคุณต้องการ
ตรวจสอบman inotifywait
เพื่อรับแนวคิดเพิ่มเติม