หากคุณกำลังมองหาไฟล์ที่จำไม่ได้ว่าเก็บไว้ที่ไหน หรือต้องการจัดการไฟล์จำนวนมหาศาลตามเงื่อนไขที่ซับซ้อน คำสั่ง 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 (/) อาจใช้เวลานานและกินทรัพยากรเครื่องสูง หากเป็นไปได้ควรระบุขอบเขตการหาให้แคบลงครับ
อ่านเพิ่มเติม
