Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在bash中获取目录及其所有子目录中的文件?_Bash_Gcc_Makefile_Kernel - Fatal编程技术网

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

如何在bash中获取目录及其所有子目录中的文件?,bash,gcc,makefile,kernel,Bash,Gcc,Makefile,Kernel,我正在开发一个C内核,我想通过使用bash脚本文件使编译所有源代码变得更容易。我需要知道如何进行foreach循环,只获取扩展名为.c的文件,然后获取我找到的每个文件的文件名,这样我就可以让gcc编译每个文件。使用查找遍历树 然后在读取时使用读取它生成的列表: find . -name \*.c | while read file do echo process $file done 如果要对文件执行的操作不是那么复杂 并且可以使用ore或两个命令来表示,您可以避免while 用找到本身,让

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

使用
查找
遍历树 然后在读取时使用
读取它生成的列表:

find . -name \*.c | while read file
do
 echo process $file
done
如果要对文件执行的操作不是那么复杂 并且可以使用ore或两个命令来表示,您可以避免
while
找到
本身,让所有的东西都能找到。为此,您将使用
-exec

find . -name \*.c -exec command {} \;
在这里,您可以编写命令,而不是
命令

您还可以使用
-execdir

find . -name \*.c -execdir command {} \;

在这种情况下,
命令将在找到的文件目录中执行(对于找到的每个文件)。

使用
find
遍历树 然后在读取时使用
读取它生成的列表:

find . -name \*.c | while read file
do
 echo process $file
done
如果要对文件执行的操作不是那么复杂 并且可以使用ore或两个命令来表示,您可以避免
while
找到
本身,让所有的东西都能找到。为此,您将使用
-exec

find . -name \*.c -exec command {} \;
在这里,您可以编写命令,而不是
命令

您还可以使用
-execdir

find . -name \*.c -execdir command {} \;

在这种情况下,
命令
将在找到的文件目录中执行(对于找到的每个文件)。

如果您使用的是
GNU make
,您可以仅使用
make
的内置函数来执行此操作,这具有使其独立于shell的优点(但对于大型树,查找速度比查找速度慢的缺点是):


如果您使用的是
gnumake
,那么您可以只使用
make
的内置函数来实现这一点,它的优点是使它独立于shell(但缺点是对于大型树,它比
find
慢):


我应该用目录名替换-name吗?否。
-name
是传递给find命令的一个选项,表示按名称搜索。
表示当前目录
,因此您应该从项目根目录运行此命令,或者用项目根目录的路径替换
*.c
表示名称与后面跟着.c
的文件相匹配的文件。因此,如果您的项目位于/foo/bar中,并且希望查找.h文件,请使用以下命令:
查找/foo/bar-name*.h
@jahroy:谢谢,jahroy,这正是我想说的:)@user1547531-如果此答案解决了您的问题,请确保选择此答案作为解决方案problem@IgorChubin为什么不
-exec
-execdir
?我应该用我的目录名替换-name吗?否。
-name
是传递给find命令的一个选项,表示按名称搜索。
表示当前目录
,因此您应该从项目根目录运行此命令,或者用项目根目录的路径替换
*.c
表示名称与后面跟.c
匹配的文件。因此,如果您的项目位于/foo/bar中,并且您想要查找.h文件,请使用以下命令:
find/foo/bar-name*.h
@jahroy:thank you jahroy,这正是我想说的:)@user1547531-如果解决了您的问题,请确保选择此答案作为解决方案problem@IgorChubin为什么不
-exec
-execdir