How to list all the files in a tree (a directory and its subdirs)?

77,625

Solution 1

tree will be very convenient for you.

sudo apt-get install tree

using tree filepathto list the files.

Solution 2

ls -alR

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

Solution 3

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.

More: http://linux.about.com/od/commands/l/blcmdl1_find.htm

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

Solution 4

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.

Solution 5

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:
77,625

Related videos on Youtube

Ivan
Author by

Ivan

Updated on September 17, 2022

Comments

  • Ivan
    Ivan almost 2 years

    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).

  • Matthew
    Matthew over 13 years
    Or just ls -R if you don't want all the details.
  • wjandrea
    wjandrea over 6 years
    You wrote dir and tree with DOS-style options, so I have to ask, will this work on Ubuntu?
  • wjandrea
    wjandrea over 6 years
    -1 Poor code formatting, not enough explanation. And why do you make an alias?
  • Anmol Singh Jaggi
    Anmol Singh Jaggi over 6 years
    Yes, I have actually scheduled it to run on my Ubuntu installation every weekend. Although, it is built using C++ and Boost, so it'll be a bit tough to compile and create a binary. That is why I am in the process of porting it to Python. Anyways, I can give you the precompiled binary if you want.