findが特定のディレクトリに移動するのを防ぎますが、まだリストする方法は何ですか?

findが特定のディレクトリに移動するのを防ぎますが、まだリストする方法は何ですか?

次のフォルダ構造があります。

example/
├── bar/
│   ├── 1
│   ├── 2
│   ├── 3
│   ├── 4
│   ├── 5.txt
│   ├── bar.mylib/
│   │   ├── 1
│   │   ├── 2
│   │   ├── 3
│   │   ├── 4
│   │   ├── 5
│   │   ├── 6
│   │   └── foo/
│   │       ├── 1
│   │       ├── 3
│   │       └── 5
│   └── foo.mylib
└── foo/
    ├── 1
    ├── 3
    ├── 5
    └── node_modules/
        ├── 1
        ├── 2
        ├── 3
        ├── 4
        └── 5

5 directories, 23 files

findすべてのファイルとディレクトリを一覧表示しますが、特定のディレクトリ名パターンを除いてそのディレクトリをまったく入力しませんが、出力にディレクトリ名を含むコマンドを作成したいと思います。

予想される出力は次のとおりです。

example/
example/foo/
example/foo/3
example/foo/5
example/foo/1
example/foo/node_modules/
example/bar/
example/bar/5.txt
example/bar/3
example/bar/4
example/bar/1
example/bar/bar.mylib/
example/bar/foo.mylib
example/bar/2

私は以下を試しました:

find . -type f ! -path '*/*.mylib/*' ! -path '*/node_modules/*'

そのような作品、しかし、無視されるディレクトリに入るようです。また、無視されたディレクトリ(たとえば、example/foo/node_modules/および)はリストされませんexample/bar/bar.mylib/

意図的に2つのパスがあります.mylib。 1つはディレクトリ用、もう1つはファイル用です。どちらもリストしたいのですが、ディレクトリの内容は無視します。

どうすればいいですかfind

答え1

戦略は、または一致するnode_modulesすべてのディレクトリを切り取り*.mylib(切り捨てるということはそのディレクトリに入らないことを意味します)、他のすべてのファイルを印刷することです。

find . -print \( -type d \( -name 'node_modules' -o -name '*.mylib' \) -prune \)

探す仕様を探すまたは手動(上記のオプションのいずれかが慣れていない場合)。

関連情報