1

私は C カーネルに取り組んでおり、bash スクリプト ファイルを使用してすべてのソースを簡単にコンパイルできるようにしたいと考えています。foreach ループを実行して拡張子が .c のファイルのみを取得し、見つけた各ファイルのファイル名を取得して、gcc で各ファイルをコンパイルできるようにする方法を知る必要があります。

4

2 に答える 2

4

を使用findしてツリーをウォークスルーし、次を使用して生成されたリストを読み取りますwhile read

find . -name \*.c | while read file
do
 echo process $file
done

ファイルで実行したいアクションがそれほど複雑ではなく、1 つまたは 2 つのコマンドを使用して表現できる場合は、それ自体を避け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 に答える