我正在开发一个C内核,我想通过使用bash脚本文件来更轻松地编译所有源代码。我需要知道如何进行foreach循环,只获取扩展名为.c的文件,然后获取我找到的每个文件的文件名,这样我就可以编译gcc了。
答案 0 :(得分:4)
使用find
遍历您的树
然后使用while read
:
find . -name \*.c | while read file
do
echo process $file
done
如果您要对文件执行的操作不是那么复杂
并且可以使用ore或两个命令表示,可以避免while
用find
本身做所有事情。为此,您将使用-exec
:
find . -name \*.c -exec command {} \;
在这里,您可以编写命令而不是command
。
您还可以使用-execdir
:
find . -name \*.c -execdir command {} \;
在这种情况下,command
将在找到的文件的目录中执行(对于找到的每个文件)。
答案 1 :(得分:1)
如果您正在使用GNU make
,则只能使用make
的内置函数来执行此操作,这样可以使其独立于shell(但速度较慢的缺点)比大树的find
:
# Usage: $(call find-recursive,DIRECTORY,PATTERN)
find-recursive = \
$(foreach f,$(wildcard $(1)/*),\
$(if $(wildcard $(f)/.),\
$(call find-recursive,$(f),$(2)),\
$(filter $(2),$(f))))
all:
@echo $(call find-recursive,.,%.c)