Android 的 envsetup.sh 中有 search command , cgrep, jgrep :
function jgrep()
{
find . -type f -name "*\.java" -print0 | xargs -0 grep --color -n "$@"
}
function cgrep()
{
find . -type f -name "*\.c*" -print0 | xargs -0 grep --color -n "$@"
}
可以學起來,search Makefile.. mk 等等其他檔案用。
還有一個是針對 目錄的:resgrep
先找出所有 名為 res 的 folder,再到所有 res folder 裡的.xml 檔裡找..
function resgrep()
{
for dir in `find . -name res -type d`; do find $dir -type f -name '*\.xml' -print0 | xargs -0 grep --color -n "$@"; done;
}
稍微筆記一下:
find
- -type 指定目錄(d) 或是檔案 (f)
- -name 指定match pattern (string)
-print0, xargs -0
- find 的輸出用 NULL (0x00) 作結尾,不用 newline
- xargs 把 0x00 作分別字元,不用 space
find 如果不要包含 "." 開頭的檔案/目錄。可以用
find . -not -name '.*'
find 如果要包含很多檔名 pattern,可以用 -o -name 來加:
find . -name '*\.java' -o -name '*\.c*'
但是一個 -o 有自己的 option,所以配合起來變成:
find . -name '*\.c' -print0 -o -name '*\.h' -print0 | xargs -0 grep pattern
沒有留言:
張貼留言