查找檔案指令如下.
find "{$PATH}" -name "file name" -exec grep -H "{$CONTENT}" {} \; |
find也可以用 [檔案名稱] 搜尋檔案, 可搭配grep指令使用.
Ex:
find / -name test.xml |
以上這段指令, 搜尋整個系統中, 是否有檔名為test.xml的檔案.
Ex:
find ./kernel -name "*.py" -exec grep -H "main" {} \; |
以上這段指令, 是要搜尋./kernel底下所有的.py檔, 內容含有"main"的地方.
find的參數:
-name 要搜尋哪些檔名
-exec utility name [argument...] {} \;
搜尋出的檔名 交給哪個執行檔(utility name)處理
{} 會被find搜尋後的檔名路徑名稱所取代
\; 代表exec的參數到此為止
-path [PATH] ( 目錄, 只吃 " * " 通用符號, " . " 跟 "/" 都當作一般字元 )
-prune ( 忽略目錄, 接在目錄後方表示前方的目錄要忽略 )
-o (Or), expr1 -o expr2 表示 "如果expr1為真, expr2就不會被執行" ( expr2 is not evaluated if expr1 is true)
-print ( default option, 會把找到的資料print出來)
#Case: 找 /etc/sysconfig/ 目錄下的資料, 但要忽略目錄 /etc/sysconfig/network-scripts/
$ find /etc/sysconfig -path /etc/sysconfig/network-scripts -prune -o -print
#Case: 找 /etc/sysconfig/ 目錄下的檔案, 但要忽略目錄 /etc/sysconfig/network-scripts/
$ find /etc/sysconfig -path /etc/sysconfig/network-scripts -prune -o -type f -print | wc
#Case: 找 /etc/sysconfig/ 目錄下的資料, 但要忽略目錄 /etc/sysconfig/network-scripts/ 及目錄 /etc/sysconfig/cbq , 要用括號.
$ find /etc/sysconfig \( -path /etc/sysconfig/network-scripts -o -path /etc/sysconfig/cbq \) -prune -o -print
#Case: 找 /etc/ 目錄下的資料, 但要忽略目錄 /etc/lvm 目錄, 並執行 grep 找出有含 hostname的 file.
$ find /etc -path /etc/lvm -prune -o -type f -exec grep -il [New hostname] {} \;
#Case: 找~目錄下的ENGSERV*資料, 但要忽略目錄 .snapshot 目錄
$ find . -path .snapshot -prune -o -name ENGSERV* -print
grep的參數:
-H 列出搜尋到的檔案名稱路徑