Display directory tree using text or JSON output.
This command-line utility is not installed by default.
$ tree
Command 'tree' not found, but can be installed with: sudo snap install tree # version 1.8.0+pkg-3fd6, or sudo apt install tree # version 2.0.2-1 See 'snap info tree' for additional versions.
Install tree
package.
$ sudo apt install tree
Display usage information.
$ tree --help
usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-L level [-R]] [-H baseHREF] [-T title] [-o filename] [-P pattern] [-I pattern] [--gitignore] [--matchdirs] [--metafirst] [--ignore-case] [--nolinks] [--inodes] [--device] [--sort[=]] [--dirsfirst] [--filesfirst] [--filelimit #] [--si] [--du] [--prune] [--charset X] [--timefmt[=]format] [--fromfile] [--noreport] [--version] [--help] [--] [directory ...] ------- 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. --gitignore Filter by using .gitignore files. --ignore-case Ignore case when pattern matching. --matchdirs Include directory names in -P pattern matching. --metafirst Print meta-data at the beginning of each line. --info Print information about files found in .info files. --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. -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. --timefmt Print and format time according to the format . -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). --filesfirst List files before directories (-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. ------- Input options ------- --fromfile Reads paths from files (.=stdin) ------- Miscellaneous options ------- --version Print version and exit. --help Print usage and this help message and exit. -- Options processing terminator.
Display directory tree.
$ tree config
config |-- _default | `-- config.yml |-- code-server-development | `-- config.yml `-- production `-- config.yml 3 directories, 3 files
Display directory tree without files.
$ tree -d config
config |-- _default |-- code-server-development `-- production 3 directories
Display directory tree two level deep.
$ tree -L 2 static/wp-content
static/wp-content `-- uploads |-- 2010 |-- 2011 |-- 2012 |-- 2013 |-- 2014 |-- 2015 |-- 2016 |-- 2017 |-- 2018 |-- 2019 |-- 2020 |-- 2021 |-- 2022 |-- 2023 |-- wc-logs |-- woocommerce-placeholder.png `-- woocommerce_uploads 17 directories, 1 file
Display directory tree without summary report.
$ tree --noreport static/wp-content/uploads/2023/
static/wp-content/uploads/2023/ |-- code-server-ports.png |-- code-server.png |-- code-server_release.png |-- forgejo.png `-- lighthouse.png
Display directory tree including file details using JSON output format.
$ tree --noreport -f -u -g -s -h -i -p -J config | jq .
[ { "type": "directory", "name": "config", "mode": "0775", "prot": "drwxrwxr-x", "user": "milosz", "group": "milosz", "size": "4.0K", "contents": [ { "type": "directory", "name": "config/_default", "mode": "0775", "prot": "drwxrwxr-x", "user": "milosz", "group": "milosz", "size": "4.0K", "contents": [ { "type": "file", "name": "config/_default/config.yml", "mode": "0664", "prot": "-rw-rw-r--", "user": "milosz", "group": "milosz", "size": "3.7K" } ] }, { "type": "directory", "name": "config/code-server-development", "mode": "0775", "prot": "drwxrwxr-x", "user": "milosz", "group": "milosz", "size": "4.0K", "contents": [ { "type": "file", "name": "config/code-server-development/config.yml", "mode": "0664", "prot": "-rw-rw-r--", "user": "milosz", "group": "milosz", "size": "19" } ] }, { "type": "directory", "name": "config/production", "mode": "0775", "prot": "drwxrwxr-x", "user": "milosz", "group": "milosz", "size": "4.0K", "contents": [ { "type": "file", "name": "config/production/config.yml", "mode": "0664", "prot": "-rw-rw-r--", "user": "milosz", "group": "milosz", "size": "3.7K" } ] } ] } ]