从 find 命令的输出中删除修剪目录的名称

Tim*_*itz 4 shell find

我正在尝试使用 find 命令生成一个目录中的源文件列表,并且只生成它的一些子目录。例子:

/Source_Files
    /dontexclude
        dontexclude.h
        dontexclude.c
    /exclude
        exclude.c
        exclude.h
    main.c
    test.c
    test.h
Run Code Online (Sandbox Code Playgroud)

我想要一个以“.c”和“.h”结尾的文件列表,我想排除 /exclude 子目录的内容。

find -name '*.c' -o -name '*.h' -o -path '*/exclude' -prune 产生这个输出:

./test.h
./exclude
./test.c
./main.c
./dontexclude/dontexclude.c
./dontexclude/dontexclude.h
Run Code Online (Sandbox Code Playgroud)

如何find在没有“./exclude”的情况下生成上述列表?

Sté*_*las 6

find . -name excludeme -prune -o \
  \( -name '*.c' -o -name '*.h' \) -print
Run Code Online (Sandbox Code Playgroud)

请记住,AND(隐式)优先于OR ( -o)。(另见-name '*.[ch]'