Sign up ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free.

For a task of mine I need to list all the files in a tree (a directory, all its subdirs, all subdirs of those, etc.).

I'd prefer to see them in Nautilus or Krusader, but a command-line solution is interesting as well (in this case I will need files full names, sizes and modification times to be listed).

share|improve this question

8 Answers 8

treeInstall tree will be very convenient for you.

sudo apt-get install tree

using tree filepathto list the files.

share|improve this answer
ls -alR

That's probably the simplest method. I'm just hacking out a find script to give you a touch more control.

share|improve this answer
Or just ls -R if you don't want all the details. –  Matthew Pirocchi Nov 30 '10 at 5:09
find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

You can play with the printf formatting as much as you like. This gives you a great opportunity to get things formatted the way you need them, which is invaluable if you're using the output in another application.


For better readability, you can pipe it all through the column command and it will automagically resize things so they line up.

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n" | column -t
share|improve this answer
+1 for column. Great solution. –  prakharsingh95 Jul 22 at 10:49

As Oli answered, find will allow you to search an entire directory tree:

find /path/ -printf "%TY-%Tm-%Td\t%s\t%p\n"

# Where %TY will display the mod. time year as 4 digits
#       %Tm will display the mod. time month as 2 digits
#       %Td will display the mod. time day as 2 digits
#       %s displays the file size in bytes
#       %p displays the full path name of the file

You may also want to use the -type f option to limit the results to just files. If you want to match a file pattern, you want the -name or -iname options (case sensitive, and case insensitive matching, respectively). Take a read through find's man page - there are a substantial amount of options that you can use to narrow/refine your search.

And just as an aside, if you are expecting to have multiple screenfuls of data get thrown back at you, remember to pipe your results through less.

@Oli : +1 I just learned something new as well - column. Hadn't used that before.

share|improve this answer

ls is the standard command to list files in Ubuntu and other Linux and Unix operating systems. ls is particularly useful to learn because you will find it installed on every Unix system you ever meet. By default running this displays only the files in the current directory.

However the -R 'flag' is the recursive option (note the capital R, not r) which will show you all the sub-directories as well.

You asked for "details" too - for this you want the -l flag (that's a lowercase L, not the number one). Be aware this gives you file permissions information as well as file size, time/date info and file name.

If you want to also show hidden files/folders (the equivalent of Ctrl+H in Nautilus) then add the -a 'all' flag.

You can merge flags together, to give you something like:

ls -lR

If you run this on any decent sized folder you will find this produces a huge long output that scrolls down your screen very fast. To get around this, you can 'pipe' the output of ls through a program called less (the name is a parody of the similar more which was around first but has more features).

ls -lR | less

This will allow you to use the up/down arrow keys, alongside PageUp/Down to go through the output at a more comfortable speed.

share|improve this answer

Using Krusader:

  1. Use Search (Ctl-S).
  2. Check off "search in subdirectories".
  3. Click "Search".
  4. When search is finished, click "Feed to listbox".

This will allow you to process the whole lot by dragging to the other panel, etc.

share|improve this answer

How about a Nautilus script?

# AUTHOR:       (c) 2013 Glutanimate (
# NAME:         DirTree 0.1
# DEPENDENCIES: zenity tree  (install with sudo apt-get install zenity tree)
# LICENSE:      GNU GPL v3 (
# DESCRIPTION:  Creates a directory tree at the current location. If you want you
#               can filter the output by a pattern (e.g. *.avi to only include avi
#               files).


# Get working directory
WORKINGDIR="`python -c 'import gio,sys; print(gio.File(sys.argv[1]).get_path())' $NAUTILUS_SCRIPT_CURRENT_URI`"

# Time and date
TIME=$(date +"%Y-%m-%d_%H%M%S")

# Filter pattern
zenity --question --title "$TITLE" --text "Do you want to filter by a specific file pattern?"

if [ "$?" = "1" ]
      PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (e.g. *.avi)")

         if [ -z "$PATTERN" ]
               customtree="tree -P $PATTERN"               


# Directory tree
$customtree "$WORKINGDIR" > "$WORKINGDIR/directorytree_$TIME.txt"

Installation instructions: How can I install a Nautilus script?

share|improve this answer

you can put these in your .bashrc file

function _get_tree(){ ls -alR | while read LINE; do   echo $LINE | grep ":$" > /dev/null;   if [ $? -eq 0 ];   then     VAR=$(echo $LINE | grep ":$"| sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/' | tee /dev/tty);   fi;   echo $LINE | grep "^-" > /dev/null;   if [ $? -eq 0 ];   then     size=${#VAR};     for i in $(eval echo "{1..$size}"); do echo -n ' '; done;     echo -n '..';     echo $LINE | cut -d ' ' -f9;   fi; done; };

alias get_tree='_get_tree'

Now, you can use get_tree command inside any directory and it will display the entire hierarchy.


$ get_tree

Sample Output:








Hope, This Helps !!

share|improve this answer
Not going to help unless you explain what you are doing.. –  Ron Jul 22 at 8:04

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.