2012-07-24 130 views

回答

4

使用find通过你的树 走,然后阅读器使用while read名单:

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

如果你想与文件做的动作也不是那么复杂 ,并且可以使用矿石表示或两个命令,您可以避免使用while 并使用find本身做所有事情。对于您将使用-exec

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

在这里,你写你的命令,而不是command

您还可以使用-execdir

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

在这种情况下command将在找到的文件的目录(每个文件被发现)执行。

+0

我应该用我的目录名称替换-name吗? – user1547531 2012-07-24 04:54:21

+1

编号'-name'是一个传递给find命令的选项,该命令表示按名称搜索。 '.'代表'当前目录',所以你应该从项目根目录运行这个命令或者用项目根目录的路径代替'.'。 '* .c'表示文件名称匹配'anthing后面跟着.c'的文件。因此,如果你的项目在/ foo/bar中并且你想要找到.h文件,使用下面的代码:'find/foo/bar -name * .h' – jahroy 2012-07-24 05:00:28

+0

@jahroy:谢谢jahroy,这正是我想说的:) – 2012-07-24 05:10:01

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) 
相关问题