find . -type d
시작점 아래의 모든 디렉토리를 찾는 데 사용할 수 있습니다. 그러나 현재 디렉토리 ( .)도 반환 하므로 원하지 않을 수 있습니다. 어떻게 제외 할 수 있습니까?
find . -type d
시작점 아래의 모든 디렉토리를 찾는 데 사용할 수 있습니다. 그러나 현재 디렉토리 ( .)도 반환 하므로 원하지 않을 수 있습니다. 어떻게 제외 할 수 있습니까?
답변:
find . ! -path . -type d
이 경우 ( .)의 경우 골프보다 mindepth솔루션 (24 vs 26 자) 보다 낫습니다 !.
다른 디렉토리를 제외하려면 골프의 성능이 떨어지고 DRYness에 대한 변수가 필요합니다.
D="long_name"
find "$D" ! -path "$D" -type d
!와 사이의 의사 결정 트리 -mindepth:
!휴대 성을 위해 사용하십시오 ..? 동전을 던져.long_name? 사용하십시오 -mindepth.find / ! -regex '/\(a\|b\)/.*'grep을 통해 파이프를 사용 하거나 더 간단하게 사용할 수 있습니다 . 하지 같이 Recurse에, 위의 매우 비효율적 당신은 사용해야합니다 -prune: stackoverflow.com/questions/1489277/...
findwith grep를 사용 했지만 상위 디렉토리가 여전히 존재하여 모든 것이 삭제되었습니다.
find, 당신은 접두사를 확인해야 할 것 : stackoverflow.com/questions/17959317/... 그러나 그것을 처리 할 수있는 for 루프 배쉬를 :-)
\!) 를 벗어나 면 안전합니다. 내 머신의 모든 예제가 man find빠져 나갔으므로 아마도 Good Idea ™ 인 것 같습니다. 편집 — 방금 명시 적으로 다음과 같이 말했습니다.! expr True if expr is false. This character will also usually need protection from interpretation by the shell.
파라미터에 find의해 재귀 깊이를 제어 할 수있을 뿐만 아니라, 해당 -maxdepth파라미터를 사용하여 깊이를 "상단"으로 제한 할 수도 있습니다 -mindepth. 따라서 실제로 필요한 것은 다음과 같습니다.
find . -mindepth 1 -type d
find . -mindepth 1 -maxdepth 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/ 기본
-exec옵션 과 함께 사용하지 마십시오 . 예를 들어을 시도 find dir/* -type d -exec rmdir {} \;하면 오류가 표시됩니다.
rmdir하고 디렉토리가 비어 있지 않다는 것을 알리고있을 가능성이 높습니다. 디렉토리를 find깊이 우선 검색하여 부모보다 먼저 자식을 표시하기 때문입니다.
find /path/ ! -path "/path/first" ! -path "/path/second"이것이 유일한 방법입니까?