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