bash 명령을 사용하여 폴더를 나열하는 방법은 무엇입니까?


52

bash 명령을 사용하여 디렉토리의 폴더 만 나열하는 방법이 있습니까? ( ls명령에 따라 모든 파일과 폴더가 나열 됨)

답변:


66

당신이 사용할 수있는:

ls -d -- */

모든 디렉토리는로 끝나기 때문에 /현재 경로의 디렉토리 만 나열합니다. -d 옵션은 디렉토리 이름이, 그 내용을하지 인쇄되도록합니다.


2
ls-* / 아래에 내용이있는 모든 디렉토리를 나열합니다
Vins

1
@ 8088 ls -d -- */과 의 차이점은 무엇입니까 ls -d */?
Louis

5
@Louis --는 일반적으로 옵션의 끝을 표시하는 데 사용되므로 파일 이름이 -lls 인 경우 파일을 긴 목록 형식 옵션으로 해석하지 않습니다.
Cristian Ciupitu

28

Stephen Martin의 응답에 경고가 표시되고 현재 폴더도 나열되었으므로 제안합니다.

find . -mindepth 1 -maxdepth 1 -type d

(이것은 Linux에 있으며 POSIX 매뉴얼 페이지에서 -maxdepth 및 -mindepth를 찾을 수 없습니다)


1
내가 아는 더 오래된 질문. 처음에는이 작업을 찾기 위해 돌아섰지만 숨겨진 디렉토리도 찾을 수 있으므로 ls -d -- */옵션이 마음에 find듭니다. 때로는 유용하지만 때로는 문제를 일으킬 수도 있습니다. 이 의견이 다른 사람들에게 도움이되기를 바랍니다. +1
matchew

12
find . -maxdepth 1 -type d

폴더 만 나열합니다. 그리고 Teddy가 지적했듯이 -subders로 recusrsing을 중지하려면 -maxdepth가 필요합니다.


5
아마 당신도 원할 것입니다 -maxdepth 1.
테디


1

당신은 ls의 결과를 "분석하지 말아야한다"고 말했다. 배후의 추론은 출력이 사람이 읽을 수 있도록 만들어졌으며 내가 기억한다면 구문 분석하는 것이 불필요하게 복잡해질 수 있다는 것입니다.

ls를 찾거나 찾지 않으려면 "[-d]"로 "*"를 필터링 해보십시오.

나는 단지 어떤 이유로 ls와 find가 작동하지 않는다고 생각합니다 (공백과 괄호가있는 파일 이름 또는 내가 간과 한 것).

for f in * ; do [ -d "$f" ] && echo $f is indeed a folder ; done

0

글로브 패턴 선택과 관련하여 나를 혼란스럽게하는 것을 강조하기 만하면됩니다. 당신이 이것을 가지고 있다고 말하십시오 :

$ cd /tmp
$ mkdir testglob
$ for ix in {00,01,02,03} ; do mkdir testglob/mydir_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/myfile_${ix} ; done
$ for ix in {00,01,02,03} ; do touch testglob/mydir_${ix}.txt ; done
$ for ix in {00,01,02,03} ; do mkdir testglob/otherdir_${ix} ; done
$ tree testglob/
testglob/
├── mydir_00
├── mydir_00.txt
├── mydir_01
├── mydir_01.txt
├── mydir_02
├── mydir_02.txt
├── mydir_03
├── mydir_03.txt
├── myfile_00
├── myfile_01
├── myfile_02
├── myfile_03
├── otherdir_00
├── otherdir_01
├── otherdir_02
└── otherdir_03

8 directories, 8 files

여기에서 mydir*디렉토리 만 선택한다고 가정하십시오 . 종료 슬래시를 제외하면 ls -d파일도 나열됩니다.

$ ls -d testglob/mydir*   # also `ls -d -- testglob/mydir*`
testglob/mydir_00      testglob/mydir_01      testglob/mydir_02      testglob/mydir_03
testglob/mydir_00.txt  testglob/mydir_01.txt  testglob/mydir_02.txt  testglob/mydir_03.txt

...하지만 슬래시가 있으면 디렉토리 만 나열됩니다.

$ ls -d testglob/mydir*/   # also `ls -d -- testglob/mydir*/`
testglob/mydir_00/  testglob/mydir_01/  testglob/mydir_02/  testglob/mydir_03/

0

printf "%s\n" */ $ PWD의 모든 디렉토리를 나열합니다.

echo */ 이름이 공백이 있으면 긴 한 줄로 작동하지만 더 어려워집니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.