다음과 같은 폴더 구조가 있습니다.
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 \)
찾다사양 찾기또는 수동(위 옵션 중 하나라도 익숙하지 않은 경우).