I'm using linux to analyze a windows directory structure. The structure is:

/Documents and settings
    /My Documents
    /My Documents

What command can I execute so that the contents (and sub folders) of all the "My Documents" directories are listed like:

/Documents and Settings/username1/My Documents/filename
/Documents and Settings/username1/My Documents/subdir/filename
/Documents and Settings/username2/My Documents/filename

Basically there are a ton of users but almost none have anything in their My Documents folder. I just want to find and show the contents of those user's that do have documents.

EDIT: Each "username" directory contains many sub directories. I only want to list the tree below the My Documents folder but do so for all usernames at once.


Combining the first two answers, use find and ls -R:

find "/Documents and settings" -name "My Documents" -exec ls -R {} \;

This will find all of the My Documents directories and list everything underneath them, with full pathnames. You need the quotes since the directory names have spaces in them.

Edit: An explination of how this works. It starts at /Documents and settings, looking for any file or directory that matches My Documents. For each one it finds, it substitutes the path for {} in the ls. The \; signifies the end of the command.

  • What does {} \; mean? – Dane O'Connor Sep 18 '09 at 16:34
  • that command is throwing: "missing argument to -exec" – Dane O'Connor Sep 18 '09 at 16:38
  • Make sure that you have the \; (backslash semicolon) on there. – KeithB Sep 18 '09 at 16:45
  • Ah, once you explained I noticed I didn't have a space between '{}' and '\;'. Perfect. I assume the '\;' is to prevent the shell from expanding ';'? – Dane O'Connor Sep 18 '09 at 16:50
  • Shoot, this is listing all the contents of Documents and Settings – Dane O'Connor Sep 18 '09 at 16:54

Just to add to the collection, ls -R doesn't really produce the nice output so I use tree command instead

find "/Documents and settings" -name "My Documents" -exec tree -f -i --noreport {} \;
ls -R path_to_your_dir


ls -lR path_to_your_dir

for better view

However, best view is achieved with

find path_to_your_dir

NOTE: -R means recursive

  • see my edit, I only need the tree below each my documents folder. Not the tree below Documents and Settings. – Dane O'Connor Sep 18 '09 at 16:29

You can use the command # find your_dir

  • see my edit, I only need the tree below each my documents folder. Not the tree below Documents and Settings. – Dane O'Connor Sep 18 '09 at 16:33

If you do want to see the pathname and don't want to have the full recursive -R listing, this seems to do roughly what you want, it's a little clunky though:

find . -type d -name '*Documents' ! -empty | (while read d; do echo $d; ls -la $d; done)

If you want the recursive listing of files and folders under Documents and Settings/User/My Documents:

find Documents\ and\ Settings/*/My\ Documents -print

If you only want only the files and folders directly under Documents and Settings/User/My Documents:

ls -dr Documents\ and\ Settings/*/My\ Documents/*

The former will include a file like Documents and Settings/User/My Documents/dir1/file1, whereas the latter will list only Documents and Settings/User/My Documents/dir1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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