up vote 0 down vote favorite
share [g+] share [fb]

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

/Documents and settings
  /username1
    /My Documents
    ...
  /username2
    /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.

link|improve this question

55% accept rate
feedback

5 Answers

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.

link|improve this answer
What does {} \; mean? – TheDeeno Sep 18 '09 at 16:34
that command is throwing: "missing argument to -exec" – TheDeeno 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 ';'? – TheDeeno Sep 18 '09 at 16:50
Shoot, this is listing all the contents of Documents and Settings – TheDeeno Sep 18 '09 at 16:54
feedback
ls -R path_to_your_dir

or

ls -lR path_to_your_dir

for better view

However, best view is achieved with

find path_to_your_dir

NOTE: -R means recursive

link|improve this answer
see my edit, I only need the tree below each my documents folder. Not the tree below Documents and Settings. – TheDeeno Sep 18 '09 at 16:29
feedback

You can use the command # find your_dir

link|improve this answer
see my edit, I only need the tree below each my documents folder. Not the tree below Documents and Settings. – TheDeeno Sep 18 '09 at 16:33
feedback

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)
link|improve this answer
feedback

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

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

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