คุณทำไม่ได้เนื่องจากผู้ใช้ที่สร้างไดเรกทอรีมีสิทธิ์เพียงพอที่จะเขียนในไดเรกทอรีหลัก
คุณสามารถใช้ประโยชน์จากinotify
ตระกูลของการโทรของระบบโดยเคอร์เนล Linux เพื่อเฝ้าดูการสร้าง (และตัวเลือกmv
) ของไดเรกทอรีshop
ในไดเรกทอรีที่กำหนดถ้าสร้าง (หรือสร้างทางเลือกmv
) rm
ไดเรกทอรี
โปรแกรม userspace ที่คุณต้องการในกรณีนี้คือinotifywait
(มาพร้อมกับinotify-tools
ติดตั้งก่อนถ้าจำเป็น)
สมมติว่าไดเรกทอรีshop
จะอยู่ใน/foo/bar
ไดเรกทอรีให้ตั้งค่าการตรวจสอบเพื่อ/foo/bar/shop
สร้างและrm
ทันทีหากสร้าง:
inotifywait -qme create /foo/bar | \
awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
inotifywait -qme create /foo/bar
เฝ้าดู/foo/bar
ไดเรกทอรีสำหรับไฟล์ / ไดเรกทอรีใด ๆ ที่อาจสร้างขึ้นเช่นเฝ้าดูcreate
เหตุการณ์ใด ๆ
หากสร้างขึ้นให้awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
ตรวจสอบว่าไฟล์เกิดขึ้นเป็นไดเรกทอรีหรือไม่และชื่อคือshop
( /,ISDIR shop$/
) ถ้าเป็นเช่นนั้นrm
ไดเรกทอรี ( system("rm -r -- /foo/bar/shop")
)
คุณต้องเรียกใช้คำสั่งในฐานะผู้ใช้ที่มีสิทธิ์เขียนในไดเรกทอรี/foo/bar
เพื่อลบออกshop
จากไดเรกทอรี
หากคุณต้องการตรวจสอบmv
การทำงานด้วยให้เพิ่มการเฝ้าดูmoved_to
กิจกรรมด้วย:
inotifywait -qme create,moved_to /foo/bar | \
awk '/,ISDIR shop$/ { system("rm -r -- /foo/bar/shop") }'
ที่จะต้องทราบหากคุณกำลังมองหาไฟล์ไม่ใช่ไดเรกทอรีชื่อshop
:
inotifywait -qme create /foo/bar | \
awk '$NF == "shop" { system("rm -- /foo/bar/shop") }'
inotifywait -qme create,moved_to /foo/bar | \
awk '$NF == "shop" { system("rm -- /foo/bar/shop") }'