1

我正在研究 C 内核,我想通过使用 bash 脚本文件更轻松地编译所有源代码。我需要知道如何进行 foreach 循环并且只获取扩展名为 .c 的文件,然后获取我找到的每个文件的文件名,这样我就可以让 gcc 编译每个文件。

4

2 回答 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 回答