如何在bash中获取目录及其所有子目录中的文件?
我正在开发一个C内核,我想通过使用bash脚本文件使编译所有源代码变得更容易。我需要知道如何进行foreach循环,只获取扩展名为.c的文件,然后获取我找到的每个文件的文件名,这样我就可以让gcc编译每个文件。使用如何在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 用找到本身,让
查找
遍历树
然后在读取时使用读取它生成的列表:
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
?