ป้ายกำกับ: ประเภท

Linux: find ค้นหาไฟล์เฉพาะเจาะจงLinux: find ค้นหาไฟล์เฉพาะเจาะจง

หากคุณกำลังมองหาไฟล์ที่จำไม่ได้ว่าเก็บไว้ที่ไหน หรือต้องการจัดการไฟล์จำนวนมหาศาลตามเงื่อนไขที่ซับซ้อน คำสั่ง find คือเครื่องมือที่ทรงพลังที่สุดบน Unix-based system ( Mac / Linux ) ครับ ต่างจาก ls ที่แค่ “มองดู” แต่ find คือการ “ออกตามล่า” ไฟล์ทั่วทั้งเครื่องตามที่คุณสั่งครับ


โครงสร้างคำสั่งพื้นฐาน

คำสั่ง find มีรูปแบบการพิมพ์ที่จำง่าย ๆ ดังนี้

find {สถานที่} {เงื่อนไข} {สิ่งที่ให้ทำต่อ}

  • สถานที่: จุดเริ่มต้นที่จะให้หา ( เช่น . คือโฟลเดอร์ปัจจุบัน หรือ / คือทั้งเครื่อง )
  • เงื่อนไข: ค้นหาด้วยอะไร? ( ชื่อ, ขนาด, ประเภท, วันที่ )
  • สิ่งที่ให้ทำต่อ: เมื่อเจอแล้วจะให้ทำอะไร? ( แสดงผล, ลบ, หรือย้ายไฟล์ )

สูตรสำเร็จการใช้งาน ( Common Use Cases )


ค้นหาตามชื่อไฟล์ ( Name )

เป็นวิธีที่ใช้บ่อยที่สุด โดยใช้แฟล็ก -name

  • หาไฟล์ชื่อตรงตัว
    find . -name "report.pdf"
  • หาแบบไม่สนตัวพิมพ์ใหญ่-เล็ก
    find . -iname "REPORT.pdf"
    ( เจอทั้ง report, Report, REPORT )
  • หาไฟล์ตามนามสกุล
    find . -name "*.jpg"
    ( หาไฟล์รูปภาพทั้งหมด )

ค้นหาตามประเภท ( Type )

บางครั้งเราต้องการหาเฉพาะ “โฟลเดอร์” หรือ “ไฟล์”

  • หาเฉพาะโฟลเดอร์
    find . -type d -name "config"
  • หาเฉพาะไฟล์ธรรมดา
    find . -type f -name "test*"

ค้นหาตามขนาดไฟล์ ( Size )

เหมาะมากสำหรับการเคลียร์พื้นที่ Hard Drive

  • หาไฟล์ที่ใหญ่กว่า 100MB
    find . -size +100M
  • หาไฟล์ที่มีขนาดเล็กกว่า 10KB
    find . -size -10k

ค้นหาตามเวลาที่แก้ไข ( Time )

  • ไฟล์ที่ถูกแก้ไขภายใน 24 ชั่วโมงที่ผ่านมา
    find . -mtime -1
  • ไฟล์ที่ไม่ได้ถูกเปิดอ่านเลยในช่วง 30 วัน
    find . -atime +30

การรวมเงื่อนไข ( Logical Operators )

คุณสามารถผสมเงื่อนไขเพื่อให้การค้นหา “คม” ยิ่งขึ้น

  • เงื่อนไข AND ( ต้องครบทั้งคู่ )
    find . -type f -name "*.log"
    ( หาไฟล์ที่เป็นไฟล์ธรรมดา และ นามสกุล .log )
  • เงื่อนไข OR ( อย่างใดอย่างหนึ่ง )
    find . \( -name "*.htm" -o -name "*.html" \)
    ( หาไฟล์ที่เป็น htm หรือ html )

เจอแล้วทำยังไงต่อ? ( Action Flags )

นี่คือจุดที่ find เหนือกว่าคำสั่งอื่น เพราะมันสั่งการต่อได้ทัน

  • สั่งลบทันที (ระวัง!)
    find . -name "*.temp" -delete
    ( หาไฟล์ขยะแล้วลบทิ้งเลย )
  • สั่งรันคำสั่งอื่นต่อยอดด้วย
    -exec: find . -name "*.conf" -exec chmod 644 {} \;

( หมายถึง: หาไฟล์ .conf ทั้งหมด แล้วสั่งเปลี่ยน Permission เป็น 644 โดย {} คือตัวแทนไฟล์ที่หาเจอ )


สรุปตารางด่วน

โจทย์การค้นหาคำสั่งที่ใช้
หาไฟล์ตามชื่อ-name "filename"
หาแบบไม่สนตัวเล็ก / ใหญ่-iname "filename"
ระบุประเภท ( ไฟล์ / โฟลเดอร์ )-type f หรือ -type d
หาตามขนาด-size +[N] หรือ -[N]
หาตามวันเวลาที่แก้ไข-mtime -[N] ( ภายใน N วัน )

ข้อควรจำ: การใช้ find ค้นหาจาก Root (/) อาจใช้เวลานานและกินทรัพยากรเครื่องสูง หากเป็นไปได้ควรระบุขอบเขตการหาให้แคบลงครับ


อ่านเพิ่มเติม