Linux / 명령어 / tree - 디렉터리 구조를 트리 형태로 출력

tree는 디렉터리와 파일의 계층 구조를 들여쓰기된 트리 형태로 보여주는 명령입니다. 현재 디렉터리 전체를 훑어보거나, 출력 깊이를 제한하고 특정 파일만 골라 프로젝트 구조를 확인할 때 유용합니다.

기본 설치부터 숨김 파일 표시, 제외 패턴, 파일 크기와 권한 확인, 텍스트·JSON 저장까지 실제로 자주 사용하는 방법을 설명합니다. 예제는 Unix/Linux용 tree를 기준으로 합니다.

tree 명령어란?

tree는 지정한 디렉터리를 재귀적으로 탐색하고, 파일과 하위 디렉터리의 관계를 깊이에 따라 들여써서 출력합니다. 디렉터리를 지정하지 않으면 현재 디렉터리 .를 대상으로 합니다.

tree

예를 들어 다음과 같은 구조를 한눈에 확인할 수 있습니다.

.
├── README.md
├── config
│   └── app.conf
├── public
│   └── index.html
└── src
    ├── main.py
    └── utils.py

3 directories, 5 files

ls도 파일 목록을 보여주지만, 기본적으로 한 디렉터리의 항목을 확인하는 데 적합합니다. tree는 여러 단계의 포함 관계를 시각적으로 파악할 때 더 편리합니다.

tree 설치하기

tree는 셸 내장 명령이 아니며 배포판에 따라 기본 설치되어 있지 않을 수 있습니다. 먼저 다음 명령으로 설치 여부를 확인하세요.

tree --version

Debian과 Ubuntu

sudo apt update
sudo apt install tree

Rocky Linux, AlmaLinux, RHEL과 Fedora

sudo dnf install tree

구형 배포판에서 dnf 대신 yum을 사용하는 경우에는 sudo yum install tree를 사용할 수 있습니다. 활성화된 저장소에 패키지가 있어야 설치됩니다.

Arch Linux

sudo pacman -S tree

기본 문법과 사용법

tree [옵션] [디렉터리 ...]

현재 디렉터리를 출력하려면 인수 없이 실행하고, 다른 위치를 확인하려면 경로를 지정합니다. 여러 디렉터리를 한 번에 지정할 수도 있습니다.

tree
tree /etc/nginx
tree ~/projects/app
tree src tests

공백이 있는 경로는 하나의 인수로 전달되도록 따옴표로 묶습니다.

tree "Project Files"

출력 마지막에는 기본적으로 탐색한 디렉터리와 파일의 개수가 표시됩니다. 이 요약이 필요하지 않으면 --noreport를 사용합니다.

tree --noreport

대상 디렉터리와 출력 깊이 지정하기

특정 디렉터리 구조 보기

현재 위치를 바꾸지 않고도 확인할 디렉터리를 인수로 지정할 수 있습니다.

tree /var/www
tree ./src

경로를 명시하면 명령 실행 위치와 출력 대상이 분리되어 자동화에서도 의도를 이해하기 쉽습니다.

-L로 최대 깊이 제한하기

큰 프로젝트나 시스템 디렉터리는 전체를 출력하면 결과가 지나치게 길어질 수 있습니다. -L 뒤에 표시할 최대 깊이를 지정하세요.

tree -L 1
tree -L 2 /var/www
tree -L 3 ~/projects/app

tree -L 2는 시작 지점에서 두 단계까지만 표시합니다. 디렉터리 구조를 공유할 때는 필요한 범위만 보이도록 깊이를 먼저 제한하는 편이 좋습니다.

숨김 파일과 디렉터리만 표시하기

-a로 숨김 파일 포함하기

기본 출력에는 이름이 점으로 시작하는 숨김 파일과 디렉터리가 포함되지 않습니다. -a를 사용하면 .env, .gitignore 같은 항목도 표시합니다.

tree -a
tree -a -L 2

설정 파일 이름이나 디렉터리 구조를 외부에 공유할 때는 비밀정보가 노출되지 않는지 확인하세요. -a는 파일 내용이 아니라 이름을 출력하지만, 이름 자체가 민감할 수도 있습니다.

-d로 디렉터리만 보기

파일을 제외하고 폴더 구조만 확인하려면 -d를 사용합니다.

tree -d
tree -d -L 3 /var/www

프로젝트의 모듈 구성이나 백업 디렉터리 배치를 빠르게 설명할 때 유용합니다.

파일 이름으로 포함하거나 제외하기

-P와 -I의 패턴은 셸이 먼저 확장하지 않도록 작은따옴표로 묶는 것이 안전합니다. 여러 패턴은 세로줄 |로 구분할 수 있습니다.

-P로 일치하는 파일만 표시하기

-P는 와일드카드 패턴에 맞는 파일만 선택합니다.

tree -P '*.py'
tree -P '*.jpg|*.png|*.webp'

필터링 후 비어 보이는 디렉터리까지 제거하려면 --prune을 함께 사용합니다.

tree -P '*.py' --prune

숨김 파일도 패턴 검사 대상에 포함하려면 -a가 추가로 필요합니다.

-I로 불필요한 항목 제외하기

-I는 패턴에 맞는 파일과 디렉터리를 출력에서 제외합니다. 의존성, 빌드 결과와 캐시 디렉터리를 숨기면 프로젝트 구조가 훨씬 간결해집니다.

tree -I 'node_modules|.git|dist|__pycache__'
tree -L 3 -I '*.log|tmp|cache'

-I는 파일을 삭제하지 않고 표시 대상에서만 제외합니다.

--gitignore로 Git 제외 규칙 사용하기

지원하는 버전에서는 --gitignore로 .gitignore와 Git 제외 파일의 규칙을 필터에 활용할 수 있습니다.

tree --gitignore
tree -a --gitignore -L 3

설치된 버전이 이 옵션을 지원하는지는 tree --help로 확인하세요. --gitignore를 사용해도 저장소 구조를 외부에 공유하기 전에는 출력 내용을 직접 검토해야 합니다.

크기, 권한과 수정 시간 표시하기

파일 크기와 디렉터리 누적 크기 보기

-s는 바이트 단위 크기를, -h를 함께 사용하면 읽기 쉬운 단위로 크기를 표시합니다.

tree -s
tree -h

--du는 각 디렉터리에 포함된 파일과 하위 디렉터리 크기를 누적해 계산합니다. 읽기 쉬운 단위를 원하면 -h를 함께 사용합니다.

tree --du -h -L 2

--du는 전체 트리를 읽고 크기를 계산한 뒤 출력하므로 큰 디렉터리에서는 시간이 오래 걸리고 메모리 사용량이 커질 수 있습니다.

권한, 소유자와 시간 보기

-p는 권한, -u는 소유자, -g는 그룹을 표시합니다. -D를 추가하면 마지막 수정 시간도 확인할 수 있습니다.

tree -p
tree -pug
tree -pugD -L 2

권한 문제를 조사할 때 구조와 메타데이터를 함께 볼 수 있지만, 매우 긴 사용자명과 경로가 있으면 출력 폭이 넓어질 수 있습니다.

정렬 순서와 경로 표시 바꾸기

디렉터리를 먼저 표시하고 정렬하기

--dirsfirst는 디렉터리를 파일보다 먼저 배치합니다. -t는 수정 시간, --sort=size는 크기를 기준으로 정렬하며 -r은 결과 순서를 뒤집습니다.

tree --dirsfirst
tree -t
tree --sort=size -r

파일 시스템에 저장된 순서를 그대로 사용하고 정렬 비용을 줄이려면 -U를 사용할 수 있습니다. 이 경우 --dirsfirst는 비활성화됩니다.

전체 경로와 간결한 목록 만들기

-f는 각 항목 앞에 전체 경로 접두어를 표시합니다. -i는 가지 모양의 들여쓰기 선을 제거합니다.

tree -f
tree -fi --noreport

다른 명령에서 읽을 단순한 경로 목록이 필요하면 -fi --noreport 조합이 편리합니다. 다만 파일명에 줄바꿈 같은 특수 문자가 있으면 단순 텍스트 파싱이 안전하지 않을 수 있습니다.

결과를 파일과 구조화 형식으로 저장하기

텍스트 파일로 저장하기

-o는 출력 결과를 지정한 파일로 보냅니다.

tree -L 3 -o directory-structure.txt
tree -a -I '.git|node_modules' --noreport -o project-tree.txt

셸 리디렉션을 사용해도 됩니다. 색상 제어 문자가 파일에 섞이지 않도록 -n으로 색상을 끌 수 있습니다.

tree -n -L 3 > directory-structure.txt

JSON과 XML로 출력하기

-J는 JSON, -X는 XML 형식으로 출력합니다. 후속 프로그램에서 구조를 분석하거나 변환할 때 사용할 수 있습니다.

tree -J -L 3 > directory-structure.json
tree -X -L 3 > directory-structure.xml

구조화 출력 형식과 제공되는 필드는 설치된 tree 버전에 따라 달라질 수 있으므로 소비 프로그램을 만들 때 실제 출력을 먼저 확인하세요.

심볼릭 링크와 파일 시스템 경계 다루기

심볼릭 링크를 따라갈지 결정하기

기본적으로 심볼릭 링크는 링크 이름과 대상 경로를 표시하지만, 링크가 가리키는 디렉터리 안으로 들어가지는 않습니다. -l을 사용하면 디렉터리를 가리키는 심볼릭 링크를 따라갑니다.

tree -l -L 3

링크를 따라가면 예상보다 많은 경로를 탐색할 수 있으므로 깊이 제한을 함께 사용하는 편이 안전합니다. 도구는 감지된 재귀 링크를 피하지만, 출력 범위와 처리 시간은 직접 확인해야 합니다.

-x로 현재 파일 시스템 안에서만 탐색하기

-x는 시작 디렉터리와 다른 파일 시스템으로 넘어가지 않게 합니다. 마운트 지점이 많은 서버에서 탐색 범위를 제한할 때 유용합니다.

tree -x -L 3 /

루트 디렉터리를 대상으로 하더라도 권한이 없는 경로는 읽을 수 없으며, 시스템 전체 구조를 출력하면 결과가 매우 커질 수 있습니다.

자주 사용하는 tree 명령 조합

명령 용도
tree 현재 디렉터리의 파일과 하위 디렉터리를 트리로 표시합니다.
tree -L 2 현재 위치에서 두 단계까지만 표시합니다.
tree -a 숨김 파일과 숨김 디렉터리도 포함합니다.
tree -d 파일을 제외하고 디렉터리만 표시합니다.
tree -I 'node_modules|.git' 지정한 패턴의 파일과 디렉터리를 제외합니다.
tree -P '*.py' --prune Python 파일이 있는 가지를 중심으로 표시합니다.
tree -h --du -L 2 두 단계까지 디렉터리의 누적 크기를 읽기 쉬운 단위로 표시합니다.
tree -pugD 권한, 사용자, 그룹과 수정 시간을 함께 표시합니다.
tree -fi --noreport 가지 선과 요약 없이 전체 경로 목록을 만듭니다.
tree -J -L 3 세 단계까지의 구조를 JSON으로 출력합니다.

주요 옵션 정리

옵션 설명
-a 점으로 시작하는 숨김 파일과 디렉터리를 포함합니다.
-d 디렉터리만 표시합니다.
-L 숫자 표시할 최대 디렉터리 깊이를 제한합니다.
-P 패턴 와일드카드 패턴과 일치하는 파일을 선택합니다.
-I 패턴 와일드카드 패턴과 일치하는 파일과 디렉터리를 제외합니다.
--prune 필터 적용 후 비어 있는 디렉터리를 출력에서 제거합니다.
--gitignore Git 제외 파일의 규칙을 필터링에 사용합니다.
-f 각 파일 이름 앞에 전체 경로 접두어를 표시합니다.
-h 파일 크기를 읽기 쉬운 단위로 표시합니다.
--du 디렉터리별 누적 크기를 계산합니다.
-p 파일 유형과 권한을 표시합니다.
-D 마지막 수정 시간을 표시합니다.
--dirsfirst 디렉터리를 파일보다 먼저 정렬합니다.
-J JSON 형식으로 출력합니다.
-X XML 형식으로 출력합니다.
-o 파일 출력을 지정한 파일에 저장합니다.
-l 디렉터리를 가리키는 심볼릭 링크를 따라갑니다.
-x 시작 위치와 같은 파일 시스템 안에서만 탐색합니다.
--noreport 마지막의 파일과 디렉터리 개수 요약을 생략합니다.

큰 디렉터리에서 사용할 때 주의할 점

깊이와 필터를 먼저 제한하기

루트 디렉터리, 사용자 홈 전체 또는 대규모 의존성 디렉터리를 제한 없이 탐색하면 출력과 처리 시간이 크게 늘어납니다. 먼저 -L로 깊이를 제한하고 -I 또는 --gitignore로 불필요한 가지를 제외하세요.

--du와 --prune의 처리 비용 이해하기

--du와 --prune은 결과를 내기 전에 전체 트리를 메모리에 모아야 할 수 있습니다. 매우 큰 디렉터리에서는 출력이 시작되기까지 지연되고 메모리 사용량도 증가할 수 있습니다.

권한 오류와 민감한 이름 확인하기

현재 사용자에게 읽기 또는 탐색 권한이 없는 디렉터리는 완전하게 표시되지 않습니다. 단순히 전체 구조를 보기 위해 관리자 권한으로 실행하면 접근 범위가 불필요하게 넓어질 수 있으므로, 먼저 필요한 경로와 권한을 확인하세요.

출력 파일을 문서나 이슈에 첨부하기 전에는 사용자명, 내부 서버 경로, 비밀 파일 이름과 프로젝트 코드명이 포함되지 않았는지 검토해야 합니다.

FAQ

tree: command not found 오류가 나오는 이유는 무엇인가요?

tree가 설치되지 않았거나 실행 파일 경로가 PATH에 없기 때문입니다. 사용하는 배포판의 패키지 관리자로 tree 패키지를 설치한 뒤 tree --version으로 확인하세요.

하위 디렉터리를 두 단계까지만 보려면 어떻게 하나요?

tree -L 2를 사용합니다. 다른 경로를 확인하려면 tree -L 2 /확인할/경로처럼 디렉터리를 뒤에 지정하세요.

node_modules와 .git 디렉터리를 한 번에 제외할 수 있나요?

tree -I 'node_modules|.git'를 사용합니다. 패턴을 작은따옴표로 묶으면 셸이 세로줄이나 와일드카드를 먼저 해석하는 일을 방지할 수 있습니다.

tree 결과를 README에 넣기 좋은 형태로 만들려면 어떻게 하나요?

tree -L 3 -I '.git|node_modules|dist' --noreport처럼 깊이와 제외 대상을 제한하세요. 결과에 내부 경로나 민감한 파일 이름이 없는지 확인한 뒤 코드 블록으로 넣으면 구조가 유지됩니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux / 명령어 / xz - 파일을 xz 형식으로 압축하기

Linux xz 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Linux / 명령어 / type - 명령어 유형과 실행 대상 확인

Bash type 명령어로 별칭, 예약어, 함수, 내장 명령과 실행 파일을 구분하는 방법을 설명합니다. 모든 후보와 경로 확인, command -v·which와의 차이 및 스크립트 활용법을 다룹니다.

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux pacman 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / file - 파일 종류와 형식 확인

Linux / 명령어 / file - 파일 종류와 형식 확인

Linux file 명령어로 확장자와 관계없이 실제 파일 형식, MIME 유형과 문자 인코딩을 확인하는 방법을 설명합니다. 심볼릭 링크, 압축 파일, 여러 파일 검사와 스크립트 활용법도 정리합니다.

Linux / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

Linux / 명령어 / hostnamectl - 호스트 이름과 시스템 정보 확인·변경

Linux hostnamectl 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어

Linux / 명령어

리눅스에서 자주 사용하는 명령어를 파일, 텍스트, 권한, 프로세스, 시스템, 디스크, 네트워크와 패키지 관리 작업별로 정리했습니다. 링크가 있는 명령어는 자세한 사용법과 예제를 확인할 수 있습니다.

Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux / 명령어 / find - 조건으로 파일과 디렉터리 검색

Linux find 명령어로 경로, 이름, 종류, 크기, 시간과 권한 조건을 조합해 파일을 찾는 방법을 설명합니다. 안전한 exec 사용과 삭제 전 검증도 다룹니다.

Linux / 명령어 / reboot - 시스템 안전하게 재시작

Linux / 명령어 / reboot - 시스템 안전하게 재시작

Linux reboot 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux 강좌 / 셸의 명령 실행 방식 - ;, &&, ||, 별칭과 환경 변수

Linux 강좌 / 셸의 명령 실행 방식 - ;, &&, ||, 별칭과 환경 변수

Bash가 명령을 해석하고 종료 상태에 따라 다음 명령을 실행하는 방식을 알아봅니다. ;, &&, ||와 별칭·환경 변수의 차이를 안전한 예제로 설명합니다.

Linux / 명령어 / join - 공통 필드로 두 파일 결합

Linux / 명령어 / join - 공통 필드로 두 파일 결합

Linux join 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.