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

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



답변

당신이 사용할 수있는:

ls -d -- */

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


답변

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

find . -mindepth 1 -maxdepth 1 -type d

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


답변

find . -maxdepth 1 -type d

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


답변

다니엘의 대답은 맞습니다. 그래도 유용한 추가 사항이 있습니다.

와 같은 숨겨진 폴더를 나열하지 않으려면 .git다음을 시도하십시오.

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \)

일부 환경에서 출력 시작 부분에 끔찍한 도트 슬래시 를 바꾸 려면find 다음을 사용하십시오.

find . -mindepth 1 -maxdepth 1 -type d  \( ! -iname ".*" \) | sed 's|^\./||g'

답변

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

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

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

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

답변

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

$ 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/

답변

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

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