我正在研究 C 内核,我想通过使用 bash 脚本文件更轻松地编译所有源代码。我需要知道如何进行 foreach 循环并且只获取扩展名为 .c 的文件,然后获取我找到的每个文件的文件名,这样我就可以让 gcc 编译每个文件。
问问题
321 次
2 回答
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
,将在找到的文件的目录中执行(对于找到的每个文件)。
于 2012-07-24T04:43:19.223 回答
1
如果您正在使用GNU make
,则可以仅使用make
的内置函数来执行此操作,这具有使其独立于外壳的优点(但缺点是比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)
于 2012-07-24T14:45:35.287 回答