- 文件列表
作爲一個碼農,經常需要看內核代碼。內核代碼萬萬,筆者需要生成一個實際使用編譯的文件列表。下面是生成的腳本。
簡單版
#!/bin/bash
cat /dev/null > /dev/shm/kernel.files
for file in $(find -L src -type f -regex '.*\.o')
do
[ -f ${file%.o}.c ] && echo ${file%.o}.c >> /dev/shm/kernel.files
[ -f ${file%.o}.h ] && echo ${file%.o}.h >> /dev/shm/kernel.files
done
[ -f /dev/shm/kernel.files ] && cp /dev/shm/kernel.files kernel.files
增強版
#!/bin/bash
add_files()
{
for file in $@
do
[ -f $file ] && echo $file >> /dev/shm/kernel.files
done
}
add_dirs()
{
for dir in $@
do
for file in $(find -L $dir -type f -regex '.*\.[ch]')
do
[ -e ${file} ] && echo ${file} >> /dev/shm/kernel.files
done
done
}
IGNORE_DIR="-path obj/source/oe-workdir"
# IGNORE_DIR+="-o -path $your_dir_want_to_ignore"
cat /dev/null > /dev/shm/kernel.files
## Please add extern files here.
# add_files your_files
## Please add extern files here.
add_dirs obj/arch/arm/include/generated \
obj/include/generated \
obj/include/config/snd
for file in $(find -L obj \( ${IGNORE_DIR} \) -prune -o -type f -regex '.*\.o')
do
tmp=src${file#obj}
[ -f ${tmp%.o}.c ] && echo ${tmp%.o}.c >> /dev/shm/kernel.files
[ -f ${tmp%.o}.h ] && echo ${tmp%.o}.h >> /dev/shm/kernel.files
done
[ -f /dev/shm/kernel.files ] && cp /dev/shm/kernel.files kernel.files
在文件列表的基礎上,增加字符串查找。
#!/bin/bash
for file in $(cat kernel.files)
do
[ -f ${file} ] && (
info=$(grep -rn "${1}" ${file})
[ -n "$info" ] && echo -E "${file} $info"
)
done