갈루아의 반서재

Photo by Johannes Plenio from Pexels

tree디렉토리를 리스팅하거나 컨텐츠 내용을 볼 때 사용할 수 있는 간단한 명령어이다. 디렉토리 경로와 서브디렉토리내의 파일, 그리고 서브디렉토리와 파일의 전체 갯수 등을 보여준다. tree 프로그램은 리눅스, 도스, 윈도우즈 등 다양한 운영체제에서 사용가능하지만 여기서는 리눅스 환경에서의 활용에 대해 살펴본다. 본격적인 사용에 앞서 해당 라이브러리부터 설치해보자.  

(AnnaM) founder@hilbert:~/annam/kaggle$ sudo apt install tree
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  linux-gcp-headers-4.15.0-1032 linux-gcp-headers-5.0.0-1020 linux-gcp-headers-5.0.0-1021
  linux-gcp-headers-5.0.0-1025 linux-gcp-headers-5.0.0-1026 linux-gcp-headers-5.0.0-1028
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
  tree
0 upgraded, 1 newly installed, 0 to remove and 78 not upgraded.
Need to get 40.7 kB of archives.
After this operation, 105 kB of additional disk space will be used.
Get:1 http://asia-east1.gce.archive.ubuntu.com/ubuntu bionic/universe amd64 tree amd64 1.7.0-5 [40.7 kB]
Fetched 40.7 kB in 1s (51.6 kB/s)
Selecting previously unselected package tree.
(Reading database ... 344765 files and directories currently installed.)
Preparing to unpack .../tree_1.7.0-5_amd64.deb ...
Unpacking tree (1.7.0-5) ...
Setting up tree (1.7.0-5) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

추가옵션을 주지 않으면 간단하게 다음과 같이 해당 디렉토리 구조를 출력해준다.

(AnnaM) founder@hilbert:~/annam/kaggle$ tree
.
├── analysis-on-coronavirus.ipynb
└── input
    └── coronavirusdataset
        ├── case.csv
        ├── patient.csv
        ├── route.csv
        ├── time.csv
        └── trend.csv

2 directories, 6 files

 

설치가 끝났으면 예제를 통해 tree 명령어 사용법을 살펴보자.

1. 디렉토리 컨텐츠를 나무 형태로 출력하고자 한다면, 원하는 디렉토리로 이동한 후 tree 명령을 실행시키면 된다. 다음과 같이 추가적인 옵션이나 인자없이 실행하면, 다음과 같이 재귀적으로 서브디렉토리와 파일, 그리고 전체 서브디렉토리 및 파일의 수를 볼 수 있다.

tree

만약 숨겨진 파일까지 전부 보고 싶으면 -a 플래그를 덧붙인다.

tree -a

 

2. 각 서브디렉토리와 파일의 전체경로를 앞에 붙여서 보고 싶다면 -f 를 덧붙인다.

tree -f

 

3. -d 옵션을 이용하여 파일을 제외한 서브디렉토리만 볼 수도 있다. 여기서 -f 까지 붙인 -df 옵션을 실행하면 전체경로까지 포함된 서브디렉토리만 호출이 가능하다.

tree -df

 

4. -L 옵션을 통해 보여줄 디렉토리의 단계를 지정할 수 있다. 뎁스가 2인 디렉토리까지만 보고 싶다면, 다음과 같이 실행하면 된다. 

tree -f -L 2

뎁스를 3으로 지정한 경우 결과는 다음과 같다. 위의 결과와 비교해보자.

tree -f -L 3

 

5. 와일드카드 패턴에 맞는 파일만 볼려면, -P 플래그와 함께 검색할 패턴을 지정하면 된다. 아래에서는 gray* 와 매칭되는 파일만 보여주게 된다.

tree -f -P cata*

 

6. 아래 명령을 통해 빈 디렉토리는 결과에서 제외하고 볼 수도 있다.

tree -f --prune

 

7. -p 를 붙여서 각각의 파일에 대한 권한도 같이 볼 수 있다.

tree -f -p

 

8. 각각의 파일의 사용자 이름(또는 UID)를 볼려면 -u 옵션을 사용하면 된다. 그리고 -g 옵션을 통해 그룹이름(또는 GID)를 볼 수 있다. 아래와 같이 -p, -u 그리고 -g 옵션을 같이 사용할 수도 있다.

tree -f -pug

 

9. 각각의 파일의 크기를 -s 옵션을 통해 바이트 표시할 수도 있다. 좀 더 가독성을 높이기 위해 아래와 같이 -h 플래그를 사용할 수도 있으며, 킬로바이트(K), 메가바이트(M), 기가바이트(G), 테라바이트(T) 와 같이 단위를 지정할 수도 있다.

tree -f -h

 

10. 마지막으로 수정한 시각을 보고 싶다면 -D 옵션을 다음과 같이 붙인다.

tree -f -pug -h -D

 

11. 마지막으로 유용한 옵션이 바로 --du 이다. 이것은 각 서브디렉토리의 크기를 그에 속한 모든 파일과 서브디렉토리의 합산한 크기를 보여준다.

tree -f --du

 

12. 그리고 실행결과를 -o 옵션을 통해 다음과 같이 저장할 수도 있다

(AnnaM) founder@hilbert:/opt/spark/data$ tree -o direc_tree.txt
(AnnaM) founder@hilbert:/opt/spark/data$ ls -al
total 24
drwxr-xr-x  5 founder founder 4096 Mar 15 03:08 .
drwxr-xr-x 15 founder founder 4096 Nov  1 08:34 ..
-rw-rw-r--  1 founder founder 3100 Mar 15 03:08 direc_tree.txt
drwxr-xr-x  2 founder founder 4096 Aug 27  2019 graphx
drwxr-xr-x  5 founder founder 4096 Aug 27  2019 mllib
drwxr-xr-x  2 founder founder 4096 Aug 27  2019 streaming

아래는 위에서 저장한 파일을 열어본 모습이다.

man tree 를 통해 더욱 많은 사용예와 옵션을 살펴볼 수 있으니 참고하시기 바란다.

 

원문소스 https://www.tecmint.com/linux-tree-command-examples/