How to use tree command to create a Files/Directory structure

How do list files and directories in a structure-like format using the Linux tree command?

In this article, we will discuss how to use the Linux tree command to create a recursive list of directories and files in proper structure-like format.

As a security analyst, I frequently use this command whenever I perform the source code review of any application. It helped me a lot to map all the files in the excel sheet with a proper structure.

Using the tree command we can list all the content of any directories in tree structure.

Installation

In Linux, we can use the apt package manager to install the tree command utility. Use the following command to it.

apt-get install tree

After the installation, use the tree command as follows

tree command basic information

Here is detailed information about all the flags of the tree command utility.

tree --help

usage: tree [-acdfghilnpqrstuvxACDFJQNSUX] [-H baseHREF] [-T title ]
[-L level [-R]] [-P pattern] [-I pattern] [-o filename] [--version]
[--help] [--inodes] [--device] [--noreport] [--nolinks] [--dirsfirst]
[--charset charset] [--filelimit[=]#] [--si] [--timefmt[=]<f>]
[--sort[=]<name>] [--matchdirs] [--ignore-case] [--fromfile] [--]
[<directory list>]
------- 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.
------- 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.

Using tree command utility

We can simply use tree command with the directory name specification like following,

tree directory/
tree command linux

As the tree command will produce depth indented recursive listing of files, It’s very helpful to analyze the directory structures of any directories.

We can tweak this command in many ways like listing only directories, filtering with regexes, listing with the colorized format, hidden files should be shown or not, etc.

Listing all the files(hidden files also)

The tree command does not list the hidden files, we have to use -a flag with tree command to list all the files and directories(i.e. Hidden files and directories)

tree -a directory/
git tree command

Listing only Directories

We can use -d flag with the tree command to list only directories of specific directories.

tree -d directory/
tree command in linux

Colorized output

We can use -C flag with tree command to produce the colorized output

tree -C directory/

How the tree command very useful to me?

Whenever I do the source code review of any project, I create a checklist where I also create a sheet that contains the directories, files, etc in the proper tree structure. It is really very helpful for me to manage and track the status of the files if it’s reviewed or not.

First of all, I use the tree command and store its output in any temporary text file. Use the command as follows,

tree directory/ > tree_output.txt

Then open the text file and copy the full content.

tree command output save to file

Create a google sheet or an excel sheet tracker and paste all the content in any specific column.

tree command output visualization in Google Sheets or Excel

Note: If you copy the content from the terminal directly and paste it into the google sheet or excel sheet, it will not look properly. I have tried that thing and saying based on my own experience(Only tried on Linux terminal to Google sheet)

So, that’s how the tree command is very useful to me and can be to you also.