次のフォルダ構造があります。
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 \)
探す仕様を探すまたは手動(上記のオプションのいずれかが慣れていない場合)。