트리 형태로 디렉토리 구조를 인쇄하는 Linux 명령


510

디렉토리 구조를 트리 형태로 인쇄하는 Bash 스크립트에서 호출 할 수있는 Linux 명령이 있습니까?

folder1
   a.txt
   b.txt
folder2
   folder3

7
그냥 실행하십시오 find. 또는 find . -not -path '*/\.*'로 시작하는 파일 및 폴더를 숨길 수 있습니다 .. 질문에서와 같이 공백이있는 출력을 원할 경우 다음 "find prettifier"스크립트와 함께 사용하십시오.find . -not -path '*/\.*' | python -c "import sys as s;s.a=[];[setattr(s,'a',list(filter(lambda p: c.startswith(p+'/'),s.a)))or (s.stdout.write(' '*len(s.a)+c[len(s.a[-1])+1 if s.a else 0:])or True) and s.a.append(c[:-1]) for c in s.stdin]"
user

11
그러한 질문이 닫히지 않고 수퍼 유저에게 이전되어서는 안됩니까?
Balmipour

12
나는이 질문이 "주 제외"로 닫힐 가치가 있다고 생각하지 않는다. 태그가 올바른 것 같습니다.
Sanket Berde

14
마이그레이션하지 않고 질문을 닫는 정책은 일반적으로 스택 오버플로와 인간 지식에 해 롭습니다. 지난 3 일 동안 Google에서 검색 한 모든 질문은 비슷한 이유로 추론되었으며 더 이상 활동을 할 수 없었습니다. 이것은 아무도 그것을 업데이트 할 수 없으며 아무도 더 나은 답변을 줄 수 없으며 스택 오버 플로우가 근시안적이거나 엘리트리스트처럼 보이게합니다. Stackoverflow는 주제에 이러한 조건이있을 때 마이그레이션이 필요한지 고려해야합니다.
Nay

5
나는 2017 년 9 월 말 에이 동일한 질문에 대한 답변을 여전히 찾고있는 @NickYeates에 동의합니다. 이러한 질문 및 답변 정책을 설계 할 때 장기적으로 생각하십시오!
Alex

답변:


774

이것이 당신이 찾고있는 나무 입니까? 대부분의 배포판에 있어야합니다 (선택적 설치 일 수 있음).

~> tree -d /proc/self/
/proc/self/
|-- attr
|-- cwd -> /proc
|-- fd
|   `-- 3 -> /proc/15589/fd
|-- fdinfo
|-- net
|   |-- dev_snmp6
|   |-- netfilter
|   |-- rpc
|   |   |-- auth.rpcsec.context
|   |   |-- auth.rpcsec.init
|   |   |-- auth.unix.gid
|   |   |-- auth.unix.ip
|   |   |-- nfs4.idtoname
|   |   |-- nfs4.nametoid
|   |   |-- nfsd.export
|   |   `-- nfsd.fh
|   `-- stat
|-- root -> /
`-- task
    `-- 15589
        |-- attr
        |-- cwd -> /proc
        |-- fd
        | `-- 3 -> /proc/15589/task/15589/fd
        |-- fdinfo
        `-- root -> /

27 directories

관리자의 웹 페이지에서 가져온 샘플.

당신은 옵션을 추가 할 수 있습니다 최대 재귀 깊이를 지정하는 숫자로 대체됩니다.-L ##

-d파일도 표시하려면 제거하십시오 .


54
이것을 보는 방문자를위한 참고 사항 : -d파일을 표시하려면 제거하십시오 !
Afr

29
: 당신을 위해 남자 페이지에는 더 플래그 봐서이 보는 모든 방문자에 대한 참고
oivvio

43
Homebrew가있는 Mac OS X에 설치하려면 : brew install tree
funfuntime

2
cygwin에 설치하려면 apt-cyg install tree(apt-cyg를 설치했다고 가정)
blockloop

2
우분투 16.04조차도 이것과 함께 제공되지 않습니다. 사용 apt-get install tree하면 설치됩니다.
Romeo Sierra

331

이것을 사용할 수 있습니다 :

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'

다음 과 같이 몇 초 안에 파일 없는 현재 하위 디렉토리의 그래픽 표현이 표시 됩니다 /var/cache/.

   .
   |-apache2
   |---mod_cache_disk
   |-apparmor
   |-apt
   |---archives
   |-----partial
   |-apt-xapian-index
   |---index.1
   |-dbconfig-common
   |---backups
   |-debconf

출처


7
OP와 같이 공백이 필요한 경우 다음과 같이하십시오. ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
Ben

내가 이것을 도트 파일을 무시하게 만들 수있는 방법은 무엇입니까? 예를 들어 .git?
GMA


32
파일을 인쇄하지 않습니다.
Tomáš Zato-복원 모니카

36
파일 : find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
JavaSheriff

18

.bashrc에 Hassou의 솔루션을 추가하려면 다음을 시도하십시오.

alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/   /'"'"' -e '"'"'s/-/|/'"'"

6
직접 복사하는 경우 첫 번째 줄 끝에서 줄 바꿈 문자를주의하십시오
Rahul

2
좋은 별칭. 그러나 끝에 ''(작은 따옴표 2 개)가 없습니다. 그것 없이도 작동하지만 ... 끝에 명령을 더 추가하려면 리터럴이 완료되지 않은 것을 볼 수 있습니다. 그래서 가야한다 alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"''
Hero Qu

6

이 명령은 폴더와 파일을 모두 표시합니다 .

find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"

출력 예 :

.
 |-trace.pcap
 |-parent
 | |-chdir1
 | | |-file1.txt
 | |-chdir2
 | | |-file2.txt
 | | |-file3.sh
 |-tmp
 | |-json-c-0.11-4.el7_0.x86_64.rpm

출처 : @javasheriff에서 코멘트 여기 . 댓글로 잠기고 답변으로 게시하면 사용자가 쉽게 확인할 수 있습니다.


python3을 위해 내가 발견 find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"잘 작동
patroqueeet

3

@Hassou의 답변 출력을 확인하고 있습니다.

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'

이것은 tree지금 의 결과와 매우 유사합니다 .

.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh

별명을 만들 수도 있습니다.

alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''

BTW tree는 MinGW와 같은 일부 환경에서는 사용할 수 없습니다. 따라서 대안이 도움이됩니다.


창에 gitbash는 마지막 표현을 좋아하지 않는다, 그것은 종료되지 않았다고 말한다
Leos Literak

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