ฉันกำลังดูไฟล์สำหรับการเปลี่ยนแปลงโดยใช้ inotify เหตุการณ์ (มันเกิดขึ้นจาก Python โทรเข้า libc)
สำหรับไฟล์บางช่วงgit cloneผมเห็นบางสิ่งบางอย่างที่แปลก: ผมเห็นIN_CREATEเหตุการณ์และฉันเห็นทางlsว่าไฟล์มีเนื้อหา แต่ผมไม่เคยเห็นหรือIN_MODIFY IN_CLOSE_WRITEนี่เป็นสาเหตุให้ฉันมีปัญหาเนื่องจากฉันต้องการตอบกลับIN_CLOSE_WRITEในไฟล์: โดยเฉพาะเพื่อเริ่มต้นการอัปโหลดเนื้อหาไฟล์
แฟ้มที่มีพฤติกรรมผิดปกติอยู่ใน.git/objects/packไดเรกทอรีและพวกเขาสิ้นสุดในหรือ.pack .idxไฟล์อื่น ๆ ที่คอมไพล์สร้างมีเชนมากกว่าปกติIN_CREATE-> IN_MODIFY-> IN_CLOSE_WRITE(ฉันไม่ได้ดูIN_OPENเหตุการณ์)
นี่คือ Docker บน MacOS แต่ฉันได้เห็นหลักฐานของ Docker บน Linux ในระบบรีโมตแล้วดังนั้นความสงสัยของฉันคือ MacOS นั้นไม่เกี่ยวข้องกัน ฉันเห็นสิ่งนี้หากกำลังดูและgit cloneอยู่ในคอนเทนเนอร์นักเทียบท่าเดียวกัน
คำถามของฉัน:
เหตุใดเหตุการณ์เหล่านี้จึงหายไปในไฟล์เหล่านี้
สิ่งที่สามารถทำได้เกี่ยวกับมันได้หรือไม่ โดยเฉพาะฉันจะตอบสนองต่อความสมบูรณ์ของการเขียนไฟล์เหล่านี้ได้อย่างไร? หมายเหตุ: นึกคิดฉันต้องการตอบสนองเมื่อการเขียนเป็น "เสร็จสิ้น" เพื่อหลีกเลี่ยงความจำเป็น / (ไม่ถูกต้อง) การอัปโหลดการเขียน "ยังไม่เสร็จ"
แก้ไข: การอ่านhttps://developer.ibm.com/tutorials/l-inotify/ดูเหมือนว่าสิ่งที่ฉันเห็นมีความสอดคล้องกับ
- ไฟล์ชั่วคราวแยกต่างหากที่มีชื่อเหมือน
tmp_pack_hBV4Alzกำลังสร้างแก้ไขและปิด - สร้างฮาร์ดลิงก์ไปยังไฟล์นี้โดยใช้
.packชื่อสุดท้าย tmp_pack_hBV4Alzชื่อเดิมจะถูกลบ
ฉันคิดว่าปัญหาของฉันซึ่งพยายามใช้ inotify เป็นตัวเรียกให้อัปโหลดไฟล์จากนั้นลดการสังเกตว่า.packไฟล์นั้นเป็นการเชื่อมโยงอย่างหนักไปยังไฟล์อื่นและการอัปโหลดในกรณีนี้คืออะไร