2

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.

6 Answers 6

2

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.

5
  • What does {} \; mean? Sep 18, 2009 at 16:34
  • that command is throwing: "missing argument to -exec" Sep 18, 2009 at 16:38
  • Make sure that you have the \; (backslash semicolon) on there.
    – KeithB
    Sep 18, 2009 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 ';'? Sep 18, 2009 at 16:50
  • Shoot, this is listing all the contents of Documents and Settings Sep 18, 2009 at 16:54
2

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 {} \;
1
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

1
  • see my edit, I only need the tree below each my documents folder. Not the tree below Documents and Settings. Sep 18, 2009 at 16:29
0

You can use the command # find your_dir

1
  • see my edit, I only need the tree below each my documents folder. Not the tree below Documents and Settings. Sep 18, 2009 at 16:33
0

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

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .