다음과 같은 명령을 실행하고 싶습니다.
- ”
inc
“폴더에서 ”X
” 라는 이름의 모든 디렉토리를 찾으십시오 . - 각 ”
X/.../inc/
” 아래에 모든 하위 디렉토리를 나열하십시오 . - 출력을 ”
list
” 파일로 리디렉션
성공하지 않고 아래 명령의 다양한 조합을 시도했습니다.
$ find X/ -name "inc" -print | xargs find {} -type d > list
find: path must precede expression
어떻게해야합니까?
답변
find
이 모든 것을 스스로 할 수 있습니다.
find X -path '*/inc/*' -type d > list
자세한 내용은 -path
부분을 읽으십시오 man find
.
주석에서 빠르게 언급했듯이 디렉토리 줄을 텍스트 파일로 구분하여 저장하면 줄 바꿈이 포함 된 디렉토리 이름을 명확하게 표현할 수 없습니다. 당신이 경우 특정 디렉토리 괜찮아 그, 줄 바꿈을 포함하지 않는다. 일반적인 말입니다.
답변
다음은 편리한 단일 라이너입니다.
find X -type d -name "inc" -exec sh -c 'find {} -type d' \; > list
find
첫 번째 find
결과 각각에서 실행됩니다 . 이 exec
옵션은 최소한의 쉘 명령을 취할 수 있습니다. 앞에서 언급 {}
했듯이 첫 번째의 각 디렉토리로 바뀝니다 find
.
두 번째 find
는 요청에 따라 inc
디렉토리를 포함하여 첫 번째 결과의 “모든 하위 디렉토리를 나열합니다” . 출력에서 그 자체를 원하지 않으면 두 번째 find
로 깊이 1의 출력 폴더를 두십시오 .
find X -type d -name "inc" -exec sh -c 'find {} -mindepth 1 -type d' \; > list
그런 다음 명령을 stdout
로 리디렉션합니다 list
.
답변
이 중첩 된 찾기를 시뮬레이트하는 대답을 찾았습니다.
find X/ -type d | grep "/inc/" > list
답변
이 시도:
find path-of-x -path '*/inc/*' -type d > list