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/.

의도적으로 두 개의 경로가 있습니다 .mylib. 하나는 디렉토리용이고 다른 하나는 파일용입니다. 둘 다 나열하고 싶지만 디렉토리의 내용은 무시합니다.

어떻게 하면 될까요 find?

답변1

전략은 또는 일치 node_modules하는 모든 디렉토리를 잘라내고 *.mylib(잘라낸다는 것은 해당 디렉토리에 들어가지 않음을 의미함) 다른 모든 파일을 인쇄하는 것입니다.

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

찾다사양 찾기또는 수동(위 옵션 중 하나라도 익숙하지 않은 경우).

관련 정보