IT story

UNIX에서 디렉토리 만 나열

hot-time 2020. 4. 29. 08:12
반응형

UNIX에서 디렉토리 만 나열


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


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


이 시도:

find . -maxdepth 1 -type d

다음과 같은

find * -maxdepth 0 -type d

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

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


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

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

예를 들어 ZSH :

zsh # ls *(/)

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

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

ls -l | grep '^d'

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

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

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

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


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

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

대답은 쉘에 따라 다릅니다 .

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

echo *(/)

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

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

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

find . -maxdepth 1 -type d -print  

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


find specifiedpath -type d

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

find specifiedpath -type d -mindepth 1 -maxdepth 1

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

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


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

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

6 directories

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


이 디렉토리가 있다면 :

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 디렉토리가 없습니다.


### 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*"

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

`ls -F | grep /`

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


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

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

du -d1 is perhaps the shortest option. (As long as you don't need to pipe the input to another command.)


To list only directories in a specified path,just type ls -l | grep drw

참고URL : https://stackoverflow.com/questions/3667329/listing-only-directories-in-unix

반응형