如何找到/ grep目录名在*nix上匹配"x"而不是"y"的所有路径?

Lan*_*ard 7 unix linux shell grep find

我有一个像这样的文件夹结构(这是一个小片段):

??? test
    ??? cases
        ??? model
            ??? client
            ?   ??? socketsTest.coffee
            ??? server
            ?   ??? socketsTest.coffee
            ??? shared
                ??? findersTest.coffee
Run Code Online (Sandbox Code Playgroud)

问题是,如何列出文件夹中.coffee存在但不存在的所有路径client

以下命令返回.coffeeserver文件夹中存在的文件匹配的所有文件:

find test -name "*Test.coffee" | egrep '/*server*/'
Run Code Online (Sandbox Code Playgroud)

但我真正需要的是一个正则表达式,除了客户端文件夹中的内容之外还匹配所有内容.

在*nix上最干净的方法是什么?最终目标是返回不在client文件夹中的文件,因此对于上面的树将是:

$ <find files except those a client folder>
test/cases/model/server/socketsTest.coffee
test/cases/model/shared/findersTest.coffee
Run Code Online (Sandbox Code Playgroud)

我尝试过这样的事情,但没有运气:

find test -name "*Test.coffee" | egrep '*model/[^client]*'
Run Code Online (Sandbox Code Playgroud)

Joh*_*ica 11

您可以使用该-prune操作忽略目录.-o意思是"或",所以读这个,"如果它被命名为客户端修剪它,否则打​​印文件名为*.coffee".

find test -name client -prune -o -name '*.coffee' -print
Run Code Online (Sandbox Code Playgroud)

或者你可以使用双重测试,它更容易阅读但效率稍差,因为它会递归到client/目录中,而第一个完全避免它们.

find test -name '*.coffee' ! -wholename '*/client/*'
Run Code Online (Sandbox Code Playgroud)