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. [donotprint]
Tutorial details
Difficulty Easy (rss)
Root privileges No
Requirements tree command
Time 2m
[/donotprint] Upon completion of listing all files/directories found, tree returns the total number of files and/or directories listed.

ADVERTISEMENTS

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
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, type 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.
🐧 If you liked this page, please support my work on Patreon or with a donation.
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig 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

ADVERTISEMENTS
14 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.

  • 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>, <code>...</code> and <kbd>...</kbd> for code samples.