2011年4月29日 星期五

find files contains ***

找內含XXX的檔案

找檔案: (列出所有檔案)
find . -type f -print

交給 grep : 先交給 xargs 把一行一行轉成 argument,再交給 grep 找 XXX
find . -print | xargs grep XXX




所以變化... 找所有 包含 XXX 的 .c 檔:
在找檔時加上選項:
find . -type f -name '*.c' -print | xargs grep XXX

兩種檔案:.c, .c :
每個 -name option 前面加上 -o
find . -type f -name '*.c' -o -name '*.h' -print | xargs grep XXX




ref :

find any files contains xx then touch it

原因: android build system 的 Makefile 好像沒有把 header 列入 depenedency check。
所以當修改一個 .h 檔,就要去找出所有 include 他的 source,作 touch。

這個動作可以分成:
  1. 找出所有包含 aa.h 的檔案
  2. 取出檔名
  3. touch 這些檔案

實例:

touch 所有 include system_properties.h 的 c source code.

找出所有含 system_properties.h 的 c 檔
find .-type f -name '*\.c' | xargs grep 'system_properties\.h
這樣會列出:
./system/core/init/init.c:#include <sys/system_properties.h>
./system/core/init/parser.c:#include <sys/_system_properties.h>
./system/core/init/property_service.c:#include <sys/_system_properties.h>
./build/tools/check_prereq/check_prereq.c:#include <sys/system_properties.h>

grep 的輸出包含 檔名跟 match location。
取出檔名:用 cut 把 ':' 後面都刪除
find . -type f -name '*\.c' | xargs grep 'system_properties\.h' | xargs cut -f1 -d ':'

結果就是:
./system/core/toolbox/watchprops.c
./system/core/toolbox/getprop.c
./system/core/libcutils/properties.c
./system/core/init/init.c
./system/core/init/parser.c
./system/core/init/property_service.c
./build/tools/check_prereq/check_prereq.c

這樣就可以餵給 touch了:
... 最後加上 | xargs touch

2011年4月18日 星期一

${PWD}

shell 內建的 variable
${PWD}
代表目前所在目錄。

用在設 project search path 時可以用:

export PATH=${PWD}/mytool:${PATH}

2011年4月17日 星期日

string as command -- with variable

要 echo command 出來,又要執行,一般:

cmd='ls a1'
${cmd}

要是 command 中要用到變數

var=a1
cmd='ls ${var}'
${cmd}

結果 ${var} 整個被當作是 string 印出來,而不是代換成 a1。

文章說,要用作變數的話,要用雙引號 "
所以

var=a1
cmd="ls ${var}"
${cmd}

結果就正確了。



ref: http://lowfatlinux.com/linux-script-variables.html

Test

code:
#/bin/sh
echo 'hello'

可以嗎?