ฉันเพิ่งพบข้อผิดพลาดที่สับสน:
rm: cannot remove `xxx/app/cache/prod': Directory not empty
ซึ่งเกิดจากคำสั่งต่อไปนี้:
rm -rf $cache_dir/*
โดย$cache_dir
นิยามว่าเป็นxxx/app/cache
ดังนั้นฉันเห็นเช่น: rm
ลบทุกอย่างในcache/prod
dir จากนั้นก่อนที่จะพยายามลบcache/prod
ไดเรกทอรี - โปรแกรมอื่นสร้างไฟล์ / ไดเรกทอรีภายในมันจึงทำให้เกิดrm
ความล้มเหลว
สมมติฐานของฉันถูกต้องหรือไม่
@ Johnny: ใช่นั่นคือสิ่งที่ฉันได้ดำเนินการจริงแล้ว :-)
—
zerkms
แม้ว่าจะไม่ปลอดภัยอย่างสมบูรณ์ หากแอปนั้นกำลังทำงานอยู่ในไดเรกทอรีนั้นมันก็จะไปอยู่กับการย้ายและทำงานได้ตามปกติ
—
Patrick
สิ่งนี้ไม่เกี่ยวข้องกับการทำ
—
Gilles 'หยุดชั่วร้าย'
rm -rf
เธรดให้ปลอดภัย: ถ้าคุณเรียกใช้หลายครั้งพร้อมกันในไดเรกทอรีเดียวกันไดเรกทอรีจะถูกลบ นี่rm -r
ไม่เกี่ยวกับอะตอม
@Gilles: มันขึ้นอยู่กับ: "ส่วนหนึ่งของรหัสคือ thread-safe ถ้ามันจัดการกับโครงสร้างข้อมูลที่ใช้ร่วมกันในลักษณะที่รับประกันการดำเนินการที่ปลอดภัยโดยหลายเธรดในเวลาเดียวกัน" ดังนั้นหากเราถือว่า "เธรด" เป็นการ
—
zerkms
rm
เรียกใช้เราอาจพูดถึงความปลอดภัยของเธรด แต่อย่างไรก็ตามมันไม่เปลี่ยนแปลงอะไรเลย
rm -r
ไม่ใช่อะตอม หากคุณต้องการให้แน่ใจว่าไม่มีไฟล์ที่ถูกสร้างขึ้นในไดเรกทอรีในขณะที่rm -rf
กำลังทำงานอยู่คุณสามารถเปลี่ยนชื่อได้ก่อนจากนั้นจึงลบไดเรกทอรีที่เปลี่ยนชื่อ