หากคุณกำลังมองหาไฟล์ที่จำไม่ได้ว่าเก็บไว้ที่ไหน หรือต้องการจัดการไฟล์จำนวนมหาศาลตามเงื่อนไขที่ซับซ้อน คำสั่ง find คือเครื่องมือที่ทรงพลังที่สุดบน Unix-based system ครับ ต่างจาก ls ที่แค่ “มองดู” แต่ find คือการ “ออกตามล่า” ไฟล์ทั่วทั้งเครื่องตามที่คุณสั่งครับ
โครงสร้างคำสั่งพื้นฐาน
คำสั่ง find มีรูปแบบการพิมพ์ที่จำง่าย ๆ ดังนี้
find {สถานที่} {เงื่อนไข} {สิ่งที่ให้ทำต่อ}
- สถานที่: จุดเริ่มต้นที่จะให้หา
- เงื่อนไข: ค้นหาด้วยอะไร?
- สิ่งที่ให้ทำต่อ: เมื่อเจอแล้วจะให้ทำอะไร?
สูตรสำเร็จการใช้งาน
ค้นหาตามชื่อไฟล์
เป็นวิธีที่ใช้บ่อยที่สุด โดยใช้แฟล็ก -name
- หาไฟล์ชื่อตรงตัว
find . -name "report.pdf" - หาแบบไม่สนตัวพิมพ์ใหญ่-เล็ก
find . -iname "REPORT.pdf" - หาไฟล์ตามนามสกุล
find . -name "*.jpg"
ค้นหาตามประเภท
บางครั้งเราต้องการหาเฉพาะ “โฟลเดอร์” หรือ “ไฟล์”
- หาเฉพาะโฟลเดอร์
find . -type d -name "config" - หาเฉพาะไฟล์ธรรมดา
find . -type f -name "test*"
ค้นหาตามขนาดไฟล์
เหมาะมากสำหรับการเคลียร์พื้นที่ Hard Drive
- หาไฟล์ที่ใหญ่กว่า 100MB
find . -size +100M - หาไฟล์ที่มีขนาดเล็กกว่า 10KB
find . -size -10k
ค้นหาตามเวลาที่แก้ไข
- ไฟล์ที่ถูกแก้ไขภายใน 24 ชั่วโมงที่ผ่านมา
find . -mtime -1 - ไฟล์ที่ไม่ได้ถูกเปิดอ่านเลยในช่วง 30 วัน
find . -atime +30
การรวมเงื่อนไข
คุณสามารถผสมเงื่อนไขเพื่อให้การค้นหา “คม” ยิ่งขึ้น
- เงื่อนไข AND
find . -type f -name "*.log" - เงื่อนไข OR
find . \ (-name "*.htm" -o -name "*.html" \)
เจอแล้วทำยังไงต่อ?
นี่คือจุดที่ find เหนือกว่าคำสั่งอื่น เพราะมันสั่งการต่อได้ทัน
- สั่งลบทันที (ระวัง!)
find . -name "*.temp" -delete - สั่งรันคำสั่งอื่นต่อยอดด้วย
-exec:find . -name "*.conf" -exec chmod 644 {} \;
สรุปตารางด่วน
| โจทย์การค้นหา | คำสั่งที่ใช้ |
| หาไฟล์ตามชื่อ | -name "filename" |
| หาแบบไม่สนตัวเล็ก / ใหญ่ | -iname "filename" |
| ระบุประเภท | -type f หรือ -type d |
| หาตามขนาด | -size +[N] หรือ -[N] |
| หาตามวันเวลาที่แก้ไข | -mtime -[N] |
ข้อควรจำ: การใช้ find ค้นหาจาก Root (/) อาจใช้เวลานานและกินทรัพยากรเครื่องสูง หากเป็นไปได้ควรระบุขอบเขตการหาให้แคบลงครับ
อ่านเพิ่มเติม