如何在bash中获取目录及其所有子目录中的文件?

时间:2012-07-24 04:40:16

标签: bash gcc makefile kernel

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

2 个答案:

答案 0 :(得分:4)

使用find遍历您的树 然后使用while read

读取它生成的列表
find . -name \*.c | while read file
do
 echo process $file
done

如果您要对文件执行的操作不是那么复杂 并且可以使用ore或两个命令表示,可以避免whilefind本身做所有事情。为此,您将使用-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)