2012-06-12 2 views
1

조금만 둘러 보았는데이 해결책을 찾을 수 없습니다. 나는 이름으로 leaf-directory를 찾고 있다고 생각한다. 이 예제에서는 모듈이라는 하위 디렉토리가없는 디렉토리 목록을 얻고 싶습니다.특정 디렉토리를 포함하지 않는 디렉토리를 찾으십시오.

modules/package1/modules/spackage1 
modules/package1/modules/spackage2 
modules/package1/modules/spackage3/modules 
modules/package1/modules/spackage3/modules/spackage1 
modules/package2/modules/ 

내가 원하는 목록은 내가 행운

find . -name modules \! -exec sh -c 'find -name modules' \; 
와이 뭔가를하려고 시작

모듈이라는 하위 디렉토리가없는라는 이름의 모듈을

modules/package1/modules/spackage3/modules/ 
modules/package2/modules/ 

모든 디렉토리가 포함됩니다

-exec는 종료 코드에서 작동합니다. 좋아요 종료 코드로 카운트를 전달합니다.

find . -name modules -exec sh -c 'exit $(find {} -name modules|grep -n ""|tail -n1|cut -d: -f1)' \; 

이렇게하면 modules라는 각 하위 디렉토리의 수를 사용하여 종료해야합니다. 그런 사랑은 없습니다.

+1

'modules/package1/modules/spackage1/modules /'가 샘플 구조체에서 지정한 디렉토리가 아니기 때문에 원하는 예제 목록을 명확히 할 수 있습니까? 감사. – beny23

+0

흥미롭게도 나는 그저 'find라는 것을 발견했습니다. -name modules -exec sh -c 'exit 0'\; ' 결과를 반환하지 않습니다. 맨페이지에 따라 exit 0은 -exec 문이없는 것처럼 동일하게 만듭니다. –

답변

0
find . -name modules |\ 
awk '{gooddir[$1]=1}\ 
END {\ 
    for(i in gooddir){\ 
     for(j in gooddir){\ 
      if(i!=j&&substr(i,0,length(j))==i)\ 
      {gooddir[i]=0;break}\ 
     }\ 
    }\ 
    for(i in gooddir){if(gooddir[i]==1){print i}}}' 

시도해주세요.

1

이것은 GNU find을 전제로합니다. "모듈"을 하나만 포함하는 모든 잎 디렉토리 찾기 :

find . -name modules \! -exec sh -c 'find -name modules' \; 

이 나쁘지 않았다

find -regex '.*/modules\(/.*\|$\)' \! -regex '.*/modules/.*/modules\(/.*\|$\)' -type d -links 2 
0

귀하의 시작, 그냥 몇 가지 개선이 필요합니다.

  • {}

    find . -name modules \! -exec sh -c 'find {} -mindepth 1 -name modules|read' \; -print 
    
      다시
    • -mindepth 1이 다시는 출구를 설정하는
    • |read 자체를 찾기 위해 만 발견 modules 디렉토리에서 검색하지 않도록 상단 디렉토리에 발견 된 모듈 디렉토리에서 검색하기 파일을 찾을 수없는 경우 상태 (불행히도 find는 검색하지 않음)
    • -print 발견 된 디렉토리를 인쇄하려면
  • 관련 문제