7

私はこのようなフォルダ構造を持っています(これは小さなスニペットです):

└── test
    └── cases
        └── model
            ├── client
            │   ├── socketsTest.coffee
            ├── server
            │   └── socketsTest.coffee
            └── shared
                └── findersTest.coffee

問題は、フォルダで終わり、フォルダ.coffeeに存在しないすべてのパスをどのように一覧表示するかです。client

次のコマンドは、フォルダ.coffeeに存在する一致するすべてのファイルを返します。server

find test -name "*Test.coffee" | egrep '/*server*/'

しかし、私が本当に必要としているのは、クライアントフォルダーにあるものを除くすべてに一致する正規表現です。

* nixでこれを行う最もクリーンな方法は何ですか?最終的な目標は、フォルダー内にないファイルを返すことですclient。したがって、上記のツリーの場合、次のようになります。

$ <find files except those a client folder>
test/cases/model/server/socketsTest.coffee
test/cases/model/shared/findersTest.coffee

私はこのようなことをしようとしましたが、運がありませんでした:

find test -name "*Test.coffee" | egrep '*model/[^client]*'
4

2 に答える 2

11

アクションを使用して、-pruneディレクトリを無視できます。-o「または」を意味するので、「client prune itという名前の場合は、それ以外の場合は*.coffee「」という名前のファイルを出力します。

find test -name client -prune -o -name '*.coffee' -print

client/または、ダブルテストを使用することもできます。これは、ディレクトリに再帰するため、読みやすくなりますが、効率が少し低下しますが、最初のテストでは完全に回避されます。

find test -name '*.coffee' ! -wholename '*/client/*'
于 2012-09-04T01:30:47.497 に答える
1

-pruneジョン・クーゲルマンの答えは2番目です。

を使用してこの問題を解決する別の方法は、次のオプションgrepを使用することです。-v

find test -name "*Test.coffee" | grep -v client

-vパターンマッチを反転するため、「client」を含むすべてのマッチは破棄されます

于 2012-09-04T01:44:13.807 に答える