คุณทำไม่ได้เนื่องจากผู้ใช้ที่สร้างไดเรกทอรีมีสิทธิ์เพียงพอที่จะเขียนในไดเรกทอรีหลัก
คุณสามารถใช้ประโยชน์จาก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") }'