[shell] “type d”찾기에서 this / current / dot 폴더를 제외하는 방법

find . -type d

시작점 아래의 모든 디렉토리를 찾는 데 사용할 수 있습니다. 그러나 현재 디렉토리 ( .)도 반환 하므로 원하지 않을 수 있습니다. 어떻게 제외 할 수 있습니까?



답변

POSIX 7 솔루션 :

find . ! -path . -type d

이 경우 ( .)의 경우 골프보다 mindepth솔루션 (24 vs 26 자) 보다 낫습니다 !.

다른 디렉토리를 제외하려면 골프의 성능이 떨어지고 DRYness에 대한 변수가 필요합니다.

D="long_name"
find "$D" ! -path "$D" -type d

!와 사이의 의사 결정 트리 -mindepth:

  • 스크립트? !휴대 성을 위해 사용하십시오 .
  • GNU 대화식 세션?
    • 제외 .? 동전을 던져.
    • 제외 long_name? 사용하십시오 -mindepth.

답변

파라미터에 find의해 재귀 깊이를 제어 할 수있을 뿐만 아니라, 해당 -maxdepth파라미터를 사용하여 깊이를 “상단”으로 제한 할 수도 있습니다 -mindepth. 따라서 실제로 필요한 것은 다음과 같습니다.

find . -mindepth 1 -type d


답변

find ./* <...>첫 번째 수준의 도트 파일을 무시하지 않아도되는 경우 사용 합니다 ( *글로브는 기본적으로 bash에서 이것과 일치하지 않습니다-shopt 내장의 ‘dotglob’옵션 참조 : https://www.gnu.org/software/bash /manual/html_node/The-Shopt-Builtin.html ).

이클립스 tmp # find.
.
./화면
./screen/.testfile2
./.X11-unix
./.ICE-unix
./tmux-0
./tmux-0/ 기본
이클립스 tmp # find ./*
./화면
./screen/.testfile2
./tmux-0
./tmux-0/ 기본


답변

글쎄, 간단한 해결 방법도 있습니다 (솔루션은 Windows git bash에서 작동하지 않았습니다)

find * -type d

성능이 좋지는 않지만 일을 끝내고 때로는 필요한 일입니다.

[편집] : @AlexanderMills가 언급했듯이 루트 위치에 ./.hidden숨겨진 디렉토리는 표시되지 않지만 숨겨진 하위 디렉토리 (예 :)는 표시됩니다 ./folder/.hiddenSub. [Windows에서 git bash로 테스트]


답변