현재 디렉토리의 하위 디렉토리를 나열하는 올바른 방법이 있습니까?


10

나는 디렉토리의 하위 디렉토리를 찾을 수 있습니다

ls -d -- */

또는

ls -l | grep "^d"

그러나이 두 가지가 간접적으로 보이므로 디렉토리를 찾는 표준 방법이 있다고 생각합니다. 올바른 방법이 있습니까? 그리고 그렇지 않다면,이 두 가지 중 어느 것이 엣지 케이스에서 바람직하지 않은 동작으로 이어질까요? (심볼릭 링크, 숨겨진 디렉토리 등)

답변:


17

대답은 당신이하고자하는 것에 더 따라 달라집니다 함께 할 당신이 찾고있는 무엇보다 출력. 터미널에서 시각적 참조 목록을 보려면 첫 번째 솔루션이 실제로 좋습니다. 출력을 처리하려면 다른 방법을 사용해야합니다.

목록을 다른 프로그램에 제공하는 가장 강력한 방법 중 하나는 사용하는 것 find입니다.

find -maxdepth 1 -type d

피드에 유용한 이유는을 find사용하여 -print0문자열을 인수로 사용 하거나 문자열을 올바르게 이스케이프 처리 하여 null로 구분하여 데이터를 출력 할 수 있기 때문 -exec입니다. 이것이 ls의 출력을 구문 분석하는 것보다 더 좋은 이유에 대한 참조는 Greg의 Wiki의 ParsingLS 를 참조하십시오 .


4
find . -maxdepth 1 -type dOS X Yosemite에서 작동 하도록 입력해야했습니다 .
Sean Levin

1
하위 디렉토리를 나열하려면 에서처럼 -mindepth도 지정해야 find . -maxdepth 1 -mindepth 1 -type d합니다. 그렇지 않으면 현재 디렉토리 .가 포함됩니다.
tinlyx

5

참고로 ZSH (BASH는 아님)에서 다음을 수행 할 수도 있습니다. ls -d -- *(/); 수정은 단지 글로브 디렉토리에 zsh을 알려줍니다.(/)

즉, 제안 된 솔루션 ( ls -d -- */)과 크게 다르지 않으며 표준과는 거리가 멀습니다.

ls(다른 플래그에 따라 다를 수 있음) 의 출력 :

% ls
dir0 dir1 dir2 file0 file1 file2
% ls -d -- */
dir0/ dir1/ dir2/
% ls -d -- *(/)
dir0 dir1 dir2

zsh는 별표를 모든 파일 및 디렉토리로 확장하고, (/) 플래그는 해당 확장의 일부를 선택하여 ls * (/)echo * (/) 작동 하거나보다 zshly print -l * (/ ) . 첫 번째 두 버전은 bash에서 작동합니다.
Thor

1
참고 *(/)비 숨겨진 디렉토리가 펼쳐 동안 */디렉토리에 숨겨 디렉토리 나 심볼릭 링크로 확장이 (또는 경로에 대한 최소한 심볼릭 링크에있는 우리는 그들이 디렉토리에 있음을 알 수 있습니다).
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.