Linux see directory tree structure using tree command

How do list contents of directories in a structure like format under Linux operating systems?

You need to use command called tree. It will list contents of directories in a tree-like format. It is a recursive directory listing program that produces a depth indented listing of files. When directory arguments are given, tree lists all the files and/or directories found in the given directories each in turn.
Tutorial details
Difficulty level Easy
Root privileges Yes
Requirements Linux with tree command
Est. reading time 2m
Upon completion of listing all files/directories found, tree returns the total number of files and/or directories listed.

tree command installation on a Linux

By default the tree command is not installed. Type the following command to install the same on a RHEL / CentOS / Fedora Linux using yum command:
# yum install tree
## CentOS/RHEL 8.x and Fedora user try the dnf command ##
# dnf install tree

If you are using Debian / Mint / Ubuntu Linux, type the following apt-get command/apt command to install the tree command:
$ sudo apt-get install tree
If you are using Apple OS X/macOS, install Homebrew on macOS and then type the following brew command:
brew install tree

Syntax – Linux see directory tree structure

The syntax is:

tree
tree /path/to/directory
tree [options]
tree [options] /path/to/directory

To list contents of /etc in a tree-like format:
tree /etc
Sample outputs:

/etc
β”œβ”€β”€ acpi
β”‚Β Β  β”œβ”€β”€ asus-keyboard-backlight.sh
β”‚Β Β  β”œβ”€β”€ asus-wireless.sh
β”‚Β Β  β”œβ”€β”€ events
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ asus-keyboard-backlight-down
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ asus-keyboard-backlight-up
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ asus-wireless-off
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ asus-wireless-on
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ ibm-wireless
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ lenovo-undock
β”‚Β Β  β”‚Β Β  β”œβ”€β”€ thinkpad-cmos
β”‚Β Β  β”‚Β Β  └── tosh-wireless
β”‚Β Β  β”œβ”€β”€ ibm-wireless.sh
β”‚Β Β  β”œβ”€β”€ tosh-wireless.sh
β”‚Β Β  └── undock.sh
β”œβ”€β”€ adduser.conf
β”œβ”€β”€ aliases
β”œβ”€β”€ alsa
β”‚Β Β  └── conf.d
β”‚Β Β      β”œβ”€β”€ 10-samplerate.conf -> /usr/share/alsa/alsa.conf.d/10-samplerate.conf
β”‚Β Β      β”œβ”€β”€ 10-speexrate.conf -> /usr/share/alsa/alsa.conf.d/10-speexrate.conf
...
.
β”‚Β Β  β”œβ”€β”€ menus
β”‚Β Β  β”‚Β Β  └── gnome-applications.menu
β”‚Β Β  β”œβ”€β”€ systemd
β”‚Β Β  β”‚Β Β  └── user -> ../../systemd/user
β”‚Β Β  β”œβ”€β”€ user-dirs.conf
β”‚Β Β  β”œβ”€β”€ user-dirs.defaults
β”‚Β Β  └── Xwayland-session.d
β”‚Β Β      └── 00-xrdb
β”œβ”€β”€ xml
β”‚Β Β  β”œβ”€β”€ catalog
β”‚Β Β  β”œβ”€β”€ catalog.old
β”‚Β Β  β”œβ”€β”€ docbook-xml.xml
β”‚Β Β  β”œβ”€β”€ docbook-xml.xml.old
β”‚Β Β  β”œβ”€β”€ sgml-data.xml
β”‚Β Β  β”œβ”€β”€ sgml-data.xml.old
β”‚Β Β  β”œβ”€β”€ xml-core.xml
β”‚Β Β  └── xml-core.xml.old
β”œβ”€β”€ zsh
β”‚Β Β  β”œβ”€β”€ newuser.zshrc.recommended
β”‚Β Β  β”œβ”€β”€ zlogin
β”‚Β Β  β”œβ”€β”€ zlogout
β”‚Β Β  β”œβ”€β”€ zprofile
β”‚Β Β  β”œβ”€β”€ zshenv
β”‚Β Β  └── zshrc
└── zsh_command_not_found

447 directories, 4331 files

The -a option should be passed to see all files. 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).:
tree -a
To list directories only, run:
tree -d
Pass the -C option to see colorized output, using built-in color defaults:
tree -C
Sample outputs:

Fig.01: Linux tree Command To  Display Structure of Directory Hierarchy

Fig.01: Linux tree Command To Display Structure of Directory Hierarchy

Here is a list of all options supported by the tree program:

  ------- Listing options -------
  -a            All files are listed.
  -d            List directories only.
  -l            Follow symbolic links like directories.
  -f            Print the full path prefix for each file.
  -x            Stay on current filesystem only.
  -L level      Descend only level directories deep.
  -R            Rerun tree when max dir level reached.
  -P pattern    List only those files that match the pattern given.
  -I pattern    Do not list files that match the given pattern.
  --ignore-case Ignore case when pattern matching.
  --matchdirs   Include directory names in -P pattern matching.
  --noreport    Turn off file/directory count at end of tree listing.
  --charset X   Use charset X for terminal/HTML and indentation line output.
  --filelimit # Do not descend dirs with more than # files in them.
  --timefmt <f> Print and format time according to the format <f>.
  -o filename   Output to file instead of stdout.
  -------- File options ---------
  -q            Print non-printable characters as '?'.
  -N            Print non-printable characters as is.
  -Q            Quote filenames with double quotes.
  -p            Print the protections for each file.
  -u            Displays file owner or UID number.
  -g            Displays file group owner or GID number.
  -s            Print the size in bytes of each file.
  -h            Print the size in a more human readable way.
  --si          Like -h, but use in SI units (powers of 1000).
  -D            Print the date of last modification or (-c) status change.
  -F            Appends '/', '=', '*', '@', '|' or '>' as per ls -F.
  --inodes      Print inode number of each file.
  --device      Print device ID number to which each file belongs.
  ------- Sorting options -------
  -v            Sort files alphanumerically by version.
  -t            Sort files by last modification time.
  -c            Sort files by last status change time.
  -U            Leave files unsorted.
  -r            Reverse the order of the sort.
  --dirsfirst   List directories before files (-U disables).
  --sort X      Select sort: name,version,size,mtime,ctime.
  ------- Graphics options ------
  -i            Don't print indentation lines.
  -A            Print ANSI lines graphic indentation lines.
  -S            Print with CP437 (console) graphics indentation lines.
  -n            Turn colorization off always (-C overrides).
  -C            Turn colorization on always.
  ------- XML/HTML/JSON options -------
  -X            Prints out an XML representation of the tree.
  -J            Prints out an JSON representation of the tree.
  -H baseHREF   Prints out HTML format with baseHREF as top directory.
  -T string     Replace the default HTML title and H1 header with string.
  --nolinks     Turn off hyperlinks in HTML output.
  ---- Miscellaneous options ----
  --version     Print version and exit.
  --help        Print usage and this help message and exit.
  --            Options processing terminator.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via RSS feed or Weekly email newsletter.

🐧 15 comments so far... add one

CategoryList of Unix and Linux commands
Disk space analyzersncdu pydf
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network UtilitiesNetHogs dig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04
15 comments… add one
  • Harisankar P S Oct 2, 2013 @ 7:37

    Good tool for easy debugging.

  • Anil Jan 23, 2014 @ 6:29

    it is very usefull for me

  • Osky May 10, 2014 @ 11:09

    I get “Γ’Γ’Γ’” instead of showing the fancy ” |– ”
    I’m using Debian with Swedish character setup…

    • Osky May 10, 2014 @ 11:11

      I fixed it, I just need to add the “–charset X”

      • Osky May 11, 2014 @ 11:07

        Sorry for spamming, but I discovered that if you use PuTTY you can change character setup to UTF-8 and all colors and even Γ₯Àâ works :D

  • Eth Jan 17, 2015 @ 16:28

    This one is pretty cool without external packets. ☺

    ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
    • Pier Mar 4, 2016 @ 14:47

      Oh yes, parsing ls output is so robuste, forking 2 subshells is so quick too !
      tree definitely looks like a good little tool for this purpose.

    • AH Nov 24, 2020 @ 9:56

      Tree is definitely better. It weights 40.7 Ko only.

  • saif Jun 4, 2015 @ 5:44

    Great job

  • Pete Jun 11, 2015 @ 15:32

    Is there a way to have color also enabled?

    thanks

    • Selim Jun 10, 2016 @ 13:42

      Use option -C

  • Mona Aug 14, 2015 @ 5:12

    How to print files with this??

    ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
  • aref ghobadi Aug 19, 2015 @ 18:40

    Hi,
    thanks a lot

  • Fher Pie Jul 16, 2017 @ 14:14

    USefull Thanks!!!!

  • Abhishek Srivastava Oct 4, 2017 @ 8:20

    How to get list of only leaf files of each directory in the tree?

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre> for code samples. Still have questions? Post it on our forum