- 제목Linux tree 명령어로 폴더 구조를 텍스트로 변환하기
- 작성일자5 years ago
- 태그Linux
Linux Tree Install
트리는 Linux나 Unix, Mac 뿐만이 아니라 Windows, DOS에서도 사용 가능한 명령어다. 파일 옵션, 정렬 옵션 , 그래픽 옵션 등 다양한 옵션을 지정할 수 있으며 출력 옵션을 변경해서 XML, JSON 그리고 HTML까지 지원한다.
먼저, 이 명령어는 기본 패키지에 포함되어 있지 않으므로 설치해주어야 한다.
sudo apt install tree
기본적인 사용법
아무 폴더를 들어가서 tree -a
명령어를 실행하게 되면 폴더의 하위 폴더와 파일들을 보기 좋게 포맷해서 출력해준다. 그리고 몇 개의 파일이 있는지, 몇 개의 폴더가 있는지 요약까지 해준다. -a
플래그를 이용하면 폴더의 숨겨진 파일까지 모두 출력할 수 있다.
tree -a
OR
sudo tree -a
...생략...
│ │ ├── index.js.map
│ │ ├── types.d.ts
│ │ ├── types.d.ts.map
│ │ ├── types.js
│ │ ├── types.js.map
│ │ ├── zenObservable.d.ts
│ │ ├── zenObservable.d.ts.map
│ │ ├── zenObservable.js
│ │ └── zenObservable.js.map
│ └── package.json
├── now.json
├── package.json
├── src
│ ├── graphql
│ │ ├── db.js
│ │ ├── resolvers.js
│ │ └── schema.graphql
│ └── index.js
└── yarn.lock
805 directories, 7235 files
그 다음은 폴더의 내용들을 모두 출력할 때 파일 이름 앞에 경로 전체가 붙어야할 경우도 있다. -f
플래그는 파일 앞에 하위 디렉토리 명을 붙여준다. (path prefix) -a
플래그를 붙인 것과 마찬가지로 폴더의 하위 폴더 및 파일들을 출력하는데, 숨겨진 파일이나 폴더는 출력하지 않는다.
tree -f
...생략...
│ ├── ./node_modules/zen-observable-ts/lib/index.js.map
│ │ ├── ./node_modules/zen-observable-ts/lib/types.d.ts
│ │ ├── ./node_modules/zen-observable-ts/lib/types.d.ts.map
│ │ ├── ./node_modules/zen-observable-ts/lib/types.js
│ │ ├── ./node_modules/zen-observable-ts/lib/types.js.map
│ │ ├── ./node_modules/zen-observable-ts/lib/zenObservable.d.ts
│ │ ├── ./node_modules/zen-observable-ts/lib/zenObservable.d.ts.map
│ │ ├── ./node_modules/zen-observable-ts/lib/zenObservable.js
│ │ └── ./node_modules/zen-observable-ts/lib/zenObservable.js.map
│ └── ./node_modules/zen-observable-ts/package.json
├── ./now.json
├── ./package.json
├── ./src
│ ├── ./src/graphql
│ │ ├── ./src/graphql/db.js
│ │ ├── ./src/graphql/resolvers.js
│ │ └── ./src/graphql/schema.graphql
│ └── ./src/index.js
└── ./yarn.lock
764 directories, 7029 files
파일은 상관없이 폴더의 구조만 보고싶다면? -d
플래그를 이용하면 된다. 이 플래그를 붙혀서 명령어를 실행하게 되면, 하위 폴더의 파일은 전부 무시되고 폴더의 이름만 나오게 된다.
tree -d
│ ├── tslib
│ ├── type-is
│ ├── unpipe
│ ├── user-home
│ ├── util-deprecate
│ ├── utils-merge
│ ├── uuid
│ │ ├── bin
│ │ └── lib
│ ├── v8flags
│ │ └── node_modules
│ ├── vary
│ ├── wrappy
│ ├── ws
│ │ └── lib
│ ├── zen-observable
│ │ ├── lib
│ │ ├── scripts
│ │ ├── src
│ │ └── test
│ │ └── extras
│ └── zen-observable-ts
│ └── lib
└── src
└── graphql
폴더 이름 앞에 경로까지 붙여야 한다면? -df
처럼 플래그를 혼합하면 된다.
tree -df
│ ├── ./node_modules/tslib
│ ├── ./node_modules/type-is
│ ├── ./node_modules/unpipe
│ ├── ./node_modules/user-home
│ ├── ./node_modules/util-deprecate
│ ├── ./node_modules/utils-merge
│ ├── ./node_modules/uuid
│ │ ├── ./node_modules/uuid/bin
│ │ └── ./node_modules/uuid/lib
│ ├── ./node_modules/v8flags
│ │ └── ./node_modules/v8flags/node_modules
│ ├── ./node_modules/vary
│ ├── ./node_modules/wrappy
│ ├── ./node_modules/ws
│ │ └── ./node_modules/ws/lib
│ ├── ./node_modules/zen-observable
│ │ ├── ./node_modules/zen-observable/lib
│ │ ├── ./node_modules/zen-observable/scripts
│ │ ├── ./node_modules/zen-observable/src
│ │ └── ./node_modules/zen-observable/test
│ │ └── ./node_modules/zen-observable/test/extras
│ └── ./node_modules/zen-observable-ts
│ └── ./node_modules/zen-observable-ts/lib
└── ./src
└── ./src/graphql
-L
플래그를 이용하면 최대 깊이(depth)를 지정할 수 있다.
tree -f -L 2
│ ├── ./node_modules/type-is
│ ├── ./node_modules/unpipe
│ ├── ./node_modules/user-home
│ ├── ./node_modules/util-deprecate
│ ├── ./node_modules/utils-merge
│ ├── ./node_modules/uuid
│ ├── ./node_modules/v8flags
│ ├── ./node_modules/vary
│ ├── ./node_modules/wrappy
│ ├── ./node_modules/ws
│ ├── ./node_modules/zen-observable
│ └── ./node_modules/zen-observable-ts
├── ./now.json
tree -f -L 4
│ │ ├── ./node_modules/zen-observable-ts/lib/index.js.map
│ │ ├── ./node_modules/zen-observable-ts/lib/types.d.ts
│ │ ├── ./node_modules/zen-observable-ts/lib/types.d.ts.map
│ │ ├── ./node_modules/zen-observable-ts/lib/types.js
│ │ ├── ./node_modules/zen-observable-ts/lib/types.js.map
│ │ ├── ./node_modules/zen-observable-ts/lib/zenObservable.d.ts
│ │ ├── ./node_modules/zen-observable-ts/lib/zenObservable.d.ts.map
│ │ ├── ./node_modules/zen-observable-ts/lib/zenObservable.js
│ │ └── ./node_modules/zen-observable-ts/lib/zenObservable.js.map
│ └── ./node_modules/zen-observable-ts/package.json
├── ./now.json
유용한 옵션, 플래그
-P
플래그는 와일드 카드 패턴을 이용한 옵션으로, 해당하는 패턴의 파일들만 표시해준다. (특정 확장자만 불러와야할 때 유용)
tree -f -P *.d.ts
│ ├── ./node_modules/string_decoder
│ ├── ./node_modules/strip-ansi
│ ├── ./node_modules/subscriptions-transport-ws
│ │ ├── ./node_modules/subscriptions-transport-ws/browser
│ │ ├── ./node_modules/subscriptions-transport-ws/dist
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/client.d.ts
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/defaults.d.ts
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/index.d.ts
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/legacy
│ │ │ │ └── ./node_modules/subscriptions-transport-ws/dist/legacy/parse-legacy-protocol.d.ts
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/message-types.d.ts
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/protocol.d.ts
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/server.d.ts
│ │ │ └── ./node_modules/subscriptions-transport-ws/dist/utils
│ │ │ ├── ./node_modules/subscriptions-transport-ws/dist/utils/empty-iterable.d.ts
│ │ │ └── ./node_modules/subscriptions-transport-ws/dist/utils/is-subscriptions.d.ts
│ │ └── ./node_modules/subscriptions-transport-ws/typings.d.ts
추가적으로, --prune
옵션과 -P
플래그를 이용하면, 빈 디렉터리를 제외하고 해당 패턴에 일치하는 파일이 존재한 폴더만 출력이 된다. 예를 들면 자바스크립트 파일 확장자를 가진 파일과 폴더만 출력하고 싶다고 하면 다음과 같이 작성하면 된다.
tree -f -P *.js --prune
│ ├── ./node_modules/arr-diff
│ │ └── ./node_modules/arr-diff/index.js
│ ├── ./node_modules/arr-flatten
│ │ └── ./node_modules/arr-flatten/index.js
│ ├── ./node_modules/array-flatten
│ │ └── ./node_modules/array-flatten/array-flatten.js
│ ├── ./node_modules/array-unique
│ │ └── ./node_modules/array-unique/index.js
│ ├── ./node_modules/async-each
│ │ └── ./node_modules/async-each/index.js
│ ├── ./node_modules/async-limiter
│ │ ├── ./node_modules/async-limiter/coverage
│ │ │ └── ./node_modules/async-limiter/coverage/lcov-report
│ │ │ ├── ./node_modules/async-limiter/coverage/lcov-report/prettify.js
│ │ │ └── ./node_modules/async-limiter/coverage/lcov-report/sorter.js
│ │ └── ./node_modules/async-limiter/index.js
-h
플래그는 파일의 사이즈를 출력해주는 플래그다. 비슷한 플래그로 -s
플래그가 있지만 -h
플래그가 좀 더 읽기 쉽다.
tree -f -h
│ │ ├── [ 395] ./node_modules/zen-observable-ts/lib/bundle.cjs.js
│ │ ├── [ 322] ./node_modules/zen-observable-ts/lib/bundle.cjs.js.map
│ │ ├── [ 167] ./node_modules/zen-observable-ts/lib/bundle.esm.js
│ │ ├── [1.5K] ./node_modules/zen-observable-ts/lib/bundle.esm.js.map
│ │ ├── [ 771] ./node_modules/zen-observable-ts/lib/bundle.umd.js
│ │ ├── [1.5K] ./node_modules/zen-observable-ts/lib/bundle.umd.js.map
│ │ ├── [ 144] ./node_modules/zen-observable-ts/lib/index.d.ts
│ │ ├── [ 186] ./node_modules/zen-observable-ts/lib/index.d.ts.map
│ │ ├── [ 297] ./node_modules/zen-observable-ts/lib/index.js
│ │ ├── [ 152] ./node_modules/zen-observable-ts/lib/index.js.map
│ │ ├── [ 709] ./node_modules/zen-observable-ts/lib/types.d.ts
│ │ ├── [ 794] ./node_modules/zen-observable-ts/lib/types.d.ts.map
│ │ ├── [ 110] ./node_modules/zen-observable-ts/lib/types.js
│ │ ├── [ 102] ./node_modules/zen-observable-ts/lib/types.js.map
│ │ ├── [1.2K] ./node_modules/zen-observable-ts/lib/zenObservable.d.ts
│ │ ├── [1.8K] ./node_modules/zen-observable-ts/lib/zenObservable.d.ts.map
│ │ ├── [ 272] ./node_modules/zen-observable-ts/lib/zenObservable.js
│ │ └── [ 164] ./node_modules/zen-observable-ts/lib/zenObservable.js.map
│ └── [1.6K] ./node_modules/zen-observable-ts/package.json
-D
옵션은 최종 수정 날짜까지 출력해준다.
tree -f -h -D
│ │ ├── [1.0K Feb 16 13:00] ./src/graphql/db.js
│ │ ├── [ 281 Feb 16 13:00] ./src/graphql/resolvers.js
│ │ └── [ 275 Feb 16 13:00] ./src/graphql/schema.graphql
-o
옵션은 트리 형태로 만들어진 이 출력 형식을 파일로 만들어준다.
tree -o tree.txt
-I
옵션은 가장 유용할 것이라 생각한다. 뒤에 오는 와일드 카드 패턴을 Ignore해서 표시해준다. 다음은 node_modules 폴더와 *.txt 확장자를 Ignore 하는 방법이다.
tree -I "node_modules|*.txt"
├── README.md
├── build
│ ├── graphql
│ │ ├── db.js
│ │ └── resolvers.js
│ └── index.js
├── now.json
├── package.json
├── src
│ ├── graphql
│ │ ├── db.js
│ │ ├── resolvers.js
│ │ └── schema.graphql
│ └── index.js
└── yarn.lock
4 directories, 11 files
Linux Tree 끝