UNIX에서 디렉토리 만 나열


219

지정된 경로의 디렉토리 만 나열하고 싶습니다 ( ls이러한 옵션은 없습니다). 또한 한 줄 명령 으로이 작업을 수행 할 수 있습니까?


12
미래 : 아마도 유닉스 / 리눅스 기본 유형의 질문은 프로그래밍과 관련하여 그렇게 어렵지 않은 것이 더 좋습니다. unix.stackexchange.com
echox

답변:


315

ls -d */현재 디렉토리 내의 디렉토리를 나열하려면 이것을 시도하십시오


17
이봐, 그것은 꽤 근사하다, 나는 항상 우리에게 익숙했다 ls -al | grep '^d'-이것은 훨씬 간결하다.
paxdiablo

43
왜 사용 * / ?? 설명 해주십시오!?
Chandeep

6
적절한 설명이 없지만 */슬래시로 끝나는 항목 만 표시 하도록 강제합니다.이 경우 -F옵션이 ls사용되지 않더라도 디렉토리 가됩니다. 디렉토리에서 ls *php끝나는 모든 파일 의 동작 및 방법과 유사합니다 php.
David Hancock

3
@ user975234 누군가가 비슷한 질문을하고, 꽤 좋은 설명이 게시 거기에 링크
user1766760

17
그냥 똑같이 echo */할 것입니다
nos

95

이 시도:

find . -maxdepth 1 -type d

8
나에게 이것은 이것이 이루어져야 할 방식으로 보인다. 제안 된 ls솔루션 과 달리 find작업 수행에 대한 책임은 전적으로 귀하에게 있습니다 (한도를 부과 할 수있는 쉘 와일드 카드 확장에 의존하지 않음). 또한 훨씬 간결합니다.
peterp

1
이것에 대한 나쁜 점은 결과를 반복하려고 시도하고 결과에 이름에 공백이 있으면 작동하지 않는다는 것입니다.
ubiquibacon

2
또는 디렉토리 자체를 포함하지 않으려는 경우 : find * -maxdepth 0 -type d.
James Ko

어느 사용 @ubiquibacon find-print0또는 -exec옵션을 선택합니다.

1
적어도 내 Mac에서는 속도가 느립니다. find일반적으로 폴더를 깊이 1로만 출력 하는 전체 재귀 검색을 수행하는 것 같습니다 .
Kara Brightwell

22

다음과 같은

find * -maxdepth 0 -type d

기본적으로 조건에 따라 '*'의 확장, 즉 현재 디렉토리의 모든 항목을 필터링합니다 -type d.

이점은 출력이와 동일 ls -1 *하지만 디렉토리 및 항목 만 도트로 시작하지 않는다는 것입니다.


13

ls -d */또는 사용할 수 있습니다tree -d

또 다른 해결책은 globbing이지만 이것은 사용중인 쉘과 디렉토리 globbing이 지원되는지 여부에 따라 다릅니다.

예를 들어 ZSH :

zsh # ls *(/)

3
유닉스의 맛은 tree무엇입니까?
Johnsyweb

예를 들어 모든 주요 Linux distries? 죄송합니다. 질문이 없습니다.
echox

1
데비안 배포판 tree이 있으며 기본적으로 설치되어 있지 않습니다 (저장소에 있음).
Stephen Schrauger

1
tree명령이 기본 유닉스 명령이 아니라고 생각하는 다운 보트 (잘못되면 수정하십시오).
Tiago Cardoso

10

그것을하는 수십 가지 방법이 있기 때문에 여기 또 다른 방법이 있습니다.

tree -d -L 1 -i --noreport
  • -d : 디렉토리
  • -L : 나무의 깊이 (따라서 작업 디렉토리 1)
  • -i : 들여 쓰기 없음, 인쇄 이름 만
  • --noreport : 트리 목록 끝에 정보를보고하지 않습니다

그리고 스위치를 설명해 주셔서 감사합니다. 스택 오버플로는 답변에 관한 것입니다. 사람들이 "남자 항목을 읽으십시오!" <-답이 아닙니다.
fusion27

2 행에서 시작하려면 (점만으로 선을 건너 뛰십시오)tree -d -L 1 -i --noreport | tail -n +2
adius

이것은 소프트 링크 된 디렉토리를 나열하고 유용한 방식으로 링크하여 링크로 노출시키는 최고 순위 솔루션입니다. 나는 변형을 선호합니다 :tree -C -d -L 1 -i --noreport | tail -n+2
Amnon Harel

9
ls -l | grep '^d'

별명을 작성하여 프로파일 파일에 넣을 수 있습니다.

alias ld="ls -l| grep '^d'"

1
이 명령으로 링크를 볼 수 없습니다. 링크는 파일 또는 디렉토리 일 수 있습니다. 예 : lrwxrwxrwx 1 루트 루트 21 avril 15 17:38 cron-> / lib / init / upstart-job.
c-toesca

7
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'

☀ 찾기. -maxdepth 1-타입 d-이름 [^ \.] * | sed 's : ^ \ ./ ::'zsh : 일치하는 항목이 없습니다 : [^.] *
Michael Cole

6

현재 작업 디렉토리의 디렉토리를 나열하기 위해 ls -d */사용할 수 있습니다. 숨겨진 디렉토리를 나열 해야하는 경우이 명령을 사용하십시오. ls -d .*/


6

이것을 사용하여 디렉토리 목록을 얻으십시오.

ls -d */ | sed -e "s/\///g"

ls -d <custom-directory-path> | sed -e "s / \ /// g"가 작동하지 않습니다. 단서가 있습니까?
Dhwanit

감사합니다! 나는 모든 권한이없는 디렉토리 목록을 원했고 이것이 속임수였습니다. :)
codingjeremy

5

find specifiedpath -type d

하위 디렉토리에서 재귀를 원하지 않으면 대신 다음을 수행하십시오.

find specifiedpath -type d -mindepth 1 -maxdepth 1

"dot"디렉토리 (이름이로 시작 .)도 나열됩니다. 그러나 특별한 디렉토리 .도 아닙니다 ... "도트"디렉토리를 원하지 않으면 다음과 같이 할 수 있습니다 grep.

find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'


1
mindepth제거 를 언급 하는 것에 대한 찬성 .! 😁
adius

5

대답은 쉘에 .

에서은 zsh, 예를 들어, 다음을 수행 할 수 있습니다 :

echo *(/)

현재 작업중인 디렉토리 내의 모든 디렉토리가 표시됩니다.

보다 man zshexpn 은 참조하십시오.

다른 접근법은을 사용하는 것이며 find(1), 대부분의 유닉스 풍미에서 작동합니다.

find . -maxdepth 1 -type d -print  

find(1)많은 용도가 있으므로 꼭 추천 man find합니다.


4

스위치 tree와 함께 명령을 사용하여 d이를 수행 할 수 있습니다 .

% tree -d tstdir
tstdir
|-- d1
|   `-- d11
|       `-- d111
`-- d2
    `-- d21
        `-- d211

6 directories

자세한 내용은 참조하십시오 man tree.


나는 downvote하지 않았다, 단지 같은 질문을했다. 귀하의 답변이 echox의 속임수 인 것 같습니다. 아마도 그 이유는 무엇입니까?.
Louis Waweru

1
@ Louis- 감사 tree합니다. 글쎄, 다른 사람의 천둥을 훔치려는 의도는 아니었다.
slm

나무의 기능 시각화에 대한 찬성 투표
Andrejs


@TiagoCardoso-광산은 2 년 전에 시작합니다.
slm

2

이 디렉토리가 있다면 :

ls -l

lrwxrwxrwx  1 nagios nagios     11 août   2 18:46 conf_nagios -> /etc/icinga
-rw-------  1 nagios nagios 724930 août  15 21:00 dead.letter
-rw-r--r--  1 nagios nagios  12312 août  23 00:13 icinga.log
-rw-r--r--  1 nagios nagios   8323 août  23 00:12 icinga.log.gz
drwxr-xr-x  2 nagios nagios   4096 août  23 16:36 tmp

모든 디렉토리를 얻으려면 -L을 사용하여 링크를 확인하십시오.

ls -lL | grep '^d'

drwxr-xr-x 5 nagios nagios   4096 août  15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

-L없이 :

ls -l | grep '^d'

drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

conf_nagios 디렉토리가 없습니다.


2
### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"

1

이것은 나를 위해 일하고있다 :

`ls -F | grep /`

(그러나 echo */@nos에서 언급 한대로 전환하고 있습니다)


1

연결된 디렉토리를 보여주는 또 다른 솔루션이 있습니다. "normal"ls -l 출력의 하위 집합이기 때문에 약간 선호합니다.

ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always

1

bash에서 :

ls -d */

모든 디렉토리를 나열합니다

ls -ld */

모든 디렉토리를 긴 형식으로 나열합니다

ls -ld */ .*/

숨겨진 디렉토리를 포함한 모든 디렉토리를 긴 형식으로 나열합니다.


최근에 zsh (MacOS Catalina)로 전환했으며 다음을 발견했습니다.

ls -ld */ .*/

더 이상 작동하지 않습니다 경우 현재 디렉토리는 숨겨진 디렉토리가 포함되어 있습니다.

zsh: no matches found: .*/

위의 오류를 인쇄하지만 디렉토리를 인쇄하지 못합니다.

ls -ld *(/) .*(/)

또한 같은 방식으로 실패합니다.

지금까지 나는 이것을 발견했다.

ls -ld */;ls -ld .*/

괜찮은 해결 방법입니다. 은 ;명령 분리기이다. 그러나 숨겨진 디렉토리가 없으면 디렉토리를 나열하고 숨겨진 디렉토리가 없으면 오류를 인쇄합니다.

foo
bar
zsh: no matches found: .*/

ls현재 디렉토리의 목록 내용에 대한 쉘 명령
-l은 Longford에 나열하려는 것을 지정하는 플래그입니다 (한 줄에 하나의 항목 + 여러 가지 멋진 정보).
-d모든 디렉토리를 "파일"로 나열하고 재귀 적
*/으로 표시 하지 않는 플래그 입니다. '슬래시로 끝나는 모든 파일을 나열하십시오'라는 인수
*는 "anything"에 대한 간단한 정규식 명령이므로*/ 쉘에 " '/'로 끝나는 모든 것을 나열 요청합니다"

자세한 내용man ls 은 참조하십시오.


나는 이것을 넣었다.

alias lad="ls -ld */;ls -ld .*/"

내 .zshrc에서 제대로 작동하는 것 같습니다.

참고 : 나는 또한 그것을 발견했다

ls -ld .*/ 2> /dev/null

여전히 sterr을 터미널에 인쇄하므로 작동하지 않습니다. 해결책을 찾으면 답변을 업데이트 할 것입니다.


0

du -d1아마도 가장 짧은 옵션 일 것입니다. (입력을 다른 명령으로 파이프 할 필요가없는 한)


0

지정된 경로의 디렉토리 만 나열하려면 ls -l | Grep Drw


여기에는 파일 이름이 포함 된 경우 파일이 포함될 수 있으며 drw소유자가 읽고 쓸 수없는 디렉토리는 제외합니다. grep ^d더 잘 작동합니다.
Tom Zych

0

긴 디렉토리 목록

  • ls -l | grep '^ d'
  • ls -l | grep "^ d"

디렉토리 목록
- LS를 -d * /


기존 답변을 복제해야 할 충분한 이유가 있습니까?
Maxim Sagaydachny
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.