이름이 같은 모든 디렉토리에서 서브 디렉토리 찾기 . 출력을 ” list” 파일로 리디렉션 성공하지

다음과 같은 명령을 실행하고 싶습니다.

  1. inc“폴더에서 ” X” 라는 이름의 모든 디렉토리를 찾으십시오 .
  2. 각 ” X/.../inc/” 아래에 모든 하위 디렉토리를 나열하십시오 .
  3. 출력을 ” 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