본문 바로가기

개발 로그

개발노트 3 - 터미널 명령어, 디렉토리 정보를 <Tree> 구조로 보자

개발노트 3 - Command <Tree>

개발자라면 터미널에 익숙해야 마땅하겠지만, 서비스하는 서버는 정작 리눅스 계열이고, 

개발환경은 윈도우인 경우, 익숙해 지기 어려운 상황이 되기도 하죠. 

그래서 리눅스도 써보고, 맥 기반에서 개발을 해보는 일은 터미널 명령어가 익숙해지는데 도움이 되는 환경인 거 같습니다. 

저는 Mac 기반으로 사용한지 5년이 넘어가는 거 같습니다. 

기본명령어는 아니지만, 개발강좌나 블로그에서 종종 보는 <ls> 명령어가 아닌 <tree> 명령어를 오늘 소개해보려고 합니다. 


설치

별도 설치가 필요합니다. 터미널에서 아래 명령어를 호출합니다. 

brew install tree

내용

디렉토리 정보를 트리구조로 한눈에 볼 수 있는 명령어

> man tree

TREE(1)                                                                                       TREE(1)

NAME
       tree - list contents of directories in a tree-like format.

SYNOPSIS
       tree  [-acdfghilnpqrstuvxACDFQNSUX]  [-L  level  [-R]]  [-H baseHREF] [-T title] [-o filename]
       [--nolinks] [-P pattern] [-I pattern] [--inodes] [--device] [--noreport] [--dirsfirst] [--ver-
       sion]  [--help]  [--filelimit  #]  [--si]  [--prune]  [--du]  [--timefmt format] [--matchdirs]
       [--fromfile] [--] [directory ...]


DESCRIPTION
       Tree is a recursive directory listing program that produces a depth indented listing of files,
       which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to
       tty.  With no arguments, tree lists the files in the current directory.  When directory  argu-
       ments  are  given,  tree lists all the files and/or directories found in the given directories
       each in turn.  Upon completion of listing all files/directories found, tree returns the  total
       number of files and/or directories listed.

       By  default, when a symbolic link is encountered, the path that the symbolic link refers to is
       printed after the name of the link in the format:

           name -> real-path

       If the `-l' option is given and the symbolic link refers to an  actual  directory,  then  tree
       will follow the path of the symbolic link as if it were a real directory.


OPTIONS
       Tree understands the following command line switches:


LISTING OPTIONS
       -a     All  files  are  printed.  By default tree does not print hidden files (those beginning
              with a dot `.').  In no event does tree print the file system constructs  `.'  (current
              directory) and `..' (previous directory).


       -d     List directories only.


       -l     Follows  symbolic links if they point to directories, as if they were directories. Sym-
              bolic links that will result in recursion are avoided when detected.

사용해보기

Spring init를 통해서 demo 프로젝트를 만들어보고, 디렉토리 정보를 <ls>와 <tree>로 비교해보겠습니다. 

> mkdir init-project
> cd init-project
> ls

> spring init
Using service at https://start.spring.io
Content saved to 'demo.zip'

> ls -alrt
total 112
drwxr-xr-x  11 youth6erry  youth6erry    352  4 28 21:47 ..
drwxr-xr-x   3 youth6erry  youth6erry     96  4 28 21:47 .
-rw-r--r--   1 youth6erry  youth6erry  56016  4 28 21:47 demo.zip

>unzip demo.zip
Archive:  demo.zip
  inflating: mvnw
   creating: src/
   creating: src/test/
   creating: src/test/java/
   creating: src/test/java/com/
   creating: src/test/java/com/example/
   creating: src/test/java/com/example/demo/
  inflating: src/test/java/com/example/demo/DemoApplicationTests.java
   creating: src/main/
   creating: src/main/java/
   creating: src/main/java/com/
   creating: src/main/java/com/example/
   creating: src/main/java/com/example/demo/
  inflating: src/main/java/com/example/demo/DemoApplication.java
   creating: src/main/resources/
  inflating: src/main/resources/application.properties
  inflating: mvnw.cmd
  inflating: .gitignore
  inflating: pom.xml
   creating: .mvn/
   creating: .mvn/wrapper/
  inflating: .mvn/wrapper/MavenWrapperDownloader.java
  inflating: .mvn/wrapper/maven-wrapper.jar
  inflating: .mvn/wrapper/maven-wrapper.properties
  inflating: HELP.md

>ls
HELP.md  mvnw     mvnw.cmd pom.xml  src

>tree
.
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── demo
    │   │               └── DemoApplication.java
    │   └── resources
    │       └── application.properties
    └── test
        └── java
            └── com
                └── example
                    └── demo
                        └── DemoApplicationTests.java

12 directories, 7 files

어떠신가요? <tree>명령어로 새로운 프로젝트 디렉토리 구성을 한눈에 파악해보시는건 어떨까요?