Tuesday, May 26, 2009

การค้นหา file บน Linux (คำสั่ง locate) #2

คำสั่ง locate เป็นอีกหนึ่งคำสั่งที่ใช้ในการค้นหาไฟล์ซึ่งจะใช้งานได้ง่ายกว่า find และมี parameter ไม่นากนักการค้นหาไฟล์ใน locate จะไม่ได้ค้นหาไฟล์จากทุกๆ path จะมีบางที่ที่ locate ไม่ได้เข้าไปค้นหา เช่น temporary files และ home directory ของ user แต่ละคน เป็นต้น แต่ถ้าเราต้องการให้ locate ค้นหาไฟล์ที่อยู่ใน home directory ของเราเองสามารถทำได้โดยการสร้างฐานข้อมูลขึ้นมาแล้วเก็บฐานข้อมูลนั้นไว้ที่ home directory ซึ่งสามารถทำได้ดังนี้

$ cd ~
$ updatedb --output=$HOME/.tophy_locatedb --localpaths=`pwd`

คำสั่งนี้จะสร้างไฟล์ ./tophy_locatedb ซึ่งเป็นไฟล์ฐานข้อมูลของไฟล์ทั้งหมดใน home directory ของเรา

$ locate -d ~/.tophy_locatedb Calymore

คำสั่งนี้จะเป็นการค้นหาไฟล์ที่ชื่อ Claymore ในฐานข้อมูลที่เราสร้างขึ้น โดยปกติแล้วเราควรจะทำการ update ฐานข้อมูลทุกๆ วันซึ่งมักจะทำกันในช่วงเวลากลางคือด้วยการใช้คำสั่ง crontab (ไว้มีเวลาจะมาเขียนเรื่อง crontab)

$ locate Claymore

เป็นการค้นหาไฟล์ที่ชื่อว่า Claymore โดยผลลัพธ์จะแสดงเป็น full path เช่น

/home/tophy/anime/Claymore
/homt/tophy/OST/Claymore

นอกจากจะหาจากคำเต็มๆ แล้วยังใช้อักขระ '*' เข้าช่วยในการค้นหาเหมือนคำสั่ง find ได้ด้วย เช่น

$locate "Claymore*"

เป็นการหาไฟล์ใดๆ ที่ขึ้นต้นด้วยคำว่า Claymore

$locate "Claymore*" -q

จะคล้ายกับคำสั่งด้านบนแต่ว่าจะไม่แสดง error message ขึ้นมา ถ้าเทียบกับคำสั่ง find แล้วจะคล้ายกับ 2>/dev/null

$ locate "*Claymore*" -n 10

จะเหมือนกับตัวอย่างที่ 2 แต่จะแสดงผลลัพธ์ออกมาแค่ 10 รายการเท่านั้น

$ locate "*Claymore*" -i

จะหาไฟล์ที่ขึ้นต้นด้วยคำว่า Claymore โดยไม่สนใจอักขระตัวเล็กตัวใหญ่ (non-case sensitive) นอกจากตัวอย่างที่ยกมาแล้ว locate ยังมี parameter อีกตัวหนึ่งที่น่าสนใจมากคือ -r ซึ่งเป็นการใช้ regular expression มาใช้งานในการค้นหาไฟล์ เช่น

$locate -r "/Claymore.*\.avi"

เป็นคำสั่งที่ใช้ค้นหาไฟล์ที่ขึ้นต้นด้วยคำว่า Claymore และจบลงด้วยคำว่า .avi เช่น

Claymore [raw] - 01.avi
Claymore [raw] - 02.avi

Credit : http://www.secguru.com,
http://are.berkeley.edu,
http://www.codecoffee.com/tipsforlinux/articles/20.html

ref: http://top85.spaces.live.com/blog/cns!D84A636C1EFDB724!230.entry

No comments:

Post a Comment