Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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
add comment

7 Answers

treeInstall tree will be very convenient for you.

sudo apt-get install tree

using tree filepathto list the files.

share|improve this answer
add comment
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
3  
Or just ls -R if you don't want all the details. –  Matthew Nov 30 '10 at 5:09
add comment
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
share|improve this answer
add comment

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
add comment

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
add comment

How about a Nautilus script?

#!/bin/bash
#
# AUTHOR:       (c) 2013 Glutanimate (http://askubuntu.com/users/81372)
# NAME:         DirTree 0.1
# DEPENDENCIES: zenity tree  (install with sudo apt-get install zenity tree)
# LICENSE:      GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
#
# 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).

TITLE=DirTree

# 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" ]
  then
      customtree="tree"
  else
      PATTERN=$(zenity --entry --title "$TITLE" --text="Please enter a file pattern (e.g. *.avi)")

         if [ -z "$PATTERN" ]
           then
               exit
           else
               customtree="tree -P $PATTERN"               
         fi

fi

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

Installation instructions: How can I install a Nautilus script?

share|improve this answer
add comment

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
add comment

Your Answer

 
discard

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.