หากคุณพยายามลบไฟล์จำนวนมากในคราวเดียว (ฉันลบไดเรกทอรีที่มี 485,000+ วันนี้) คุณอาจพบข้อผิดพลาดนี้:
/bin/rm: Argument list too long.
ปัญหาคือว่าเมื่อคุณพิมพ์สิ่งที่ต้องการrm -rf *
ที่*
จะถูกแทนที่ด้วยรายชื่อของไฟล์ที่ตรงกันทุกที่เช่น“RM -rf file1 file2 file3 file4” และอื่น ๆ มีบัฟเฟอร์หน่วยความจำขนาดเล็กที่จัดสรรให้กับการจัดเก็บรายการอาร์กิวเมนต์นี้และถ้าเต็มแล้วเชลล์จะไม่เรียกใช้งานโปรแกรม
เพื่อแก้ไขปัญหานี้ผู้คนจำนวนมากจะใช้คำสั่ง find เพื่อค้นหาทุกไฟล์และส่งต่อทีละคำสั่ง“ rm” ดังนี้:
find . -type f -exec rm -v {} \;
ปัญหาของฉันคือฉันต้องการลบ 500,000 ไฟล์และใช้เวลานานเกินไป
ฉันพบวิธีลบไฟล์ที่เร็วกว่ามาก - คำสั่ง“ find” มีการสร้างแฟล็ก“ -delete” ในตัว! นี่คือสิ่งที่ฉันใช้:
find . -type f -delete
ใช้วิธีนี้ฉันลบไฟล์ในอัตราประมาณ 2000 ไฟล์ / วินาที - เร็วกว่ามาก!
นอกจากนี้คุณยังสามารถแสดงชื่อไฟล์ในขณะที่คุณกำลังลบ:
find . -type f -print -delete
... หรือแม้กระทั่งแสดงจำนวนไฟล์ที่จะถูกลบจากนั้นใช้เวลานานแค่ไหนในการลบ:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s