Linux – ลบไฟล์เล็กๆจำนวนมหาศาล

เรื่องมันมีอยู่ว่า Hosting ที่ดูแลอยู่โดน spam mail มหาศาลเข้าไป โฟลเดอร์ spool เลยเต็มไปด้วยเมล์ นับๆแล้วรวมกันได้ 530,367 ฉบับ แปลว่ามีไฟล์อยู่ 530,367 ไฟล์ แต่ละไฟล์ขนาดไม่เกิน 1 KB

ทีนี้ปัญหามันเกิดเมื่อต้องการลบโฟลเดอร์นี้ทิ้ง ทีนี้ partition แบบ ext3 มันจัดการไฟล์แบบนี้ได้ห่วยแตกมากๆ ลองลบด้วยหลายๆวิธีก็ไม่สำเร็จ

  • rm -rf dirname # ลองรันทิ้งไว้ชั่วโมงนึง (ไปกินข้าวมา) กลับมาเช็คจำนวนไฟล์ยังเท่าเดิมเป้ะ
  • find dirname -delete # ลองรันทิ้งไว้ 5 นาที ผลคือจำนวนไฟล์เท่าเดิมเช่นเคย

นั่งงมๆอยู่นาน เลยลองถามไปใน twitter ได้ @sourcode มาร่วมปวดหัวด้วยกัน จนสุดท้ายลองเล่นกับ shell script แทน ได้ผลแฮะ

# ls -1 dirname > list
# for i in `cat list`; do rm -f dirname/$i; done

ขอบคุณ bash อีกครั้ง อันที่จริงยังลบไม่เสร็จนะครับ ตอนนี้รันมา 15 นาที ไฟล์หายไป 100,000 กว่าๆแล้ว เหลืออีก 400,000 กว่าไฟล์เอง

ป.ล. @manatsawin ได้ส่งโค้ด python มาให้ลองเหมือนกัน พอดีผมลอง shell script อันบนแล้วสำเร็จซะก่อนเลยไม่ได้ลอง ยังไงก็ขอบคุณเช่นกันครับ

import glob,os; for i in glob.glob("*"): os.remove(i)

ดูแล้วสั้นกว่า bash เยอะเลย

Comments

comments

Leave a Reply

Your email address will not be published. Required fields are marked *