Using find to list all files under certain directory

I’m trying to use a single line command that will find every directory (or sub-directory) named bin and will then print a list of all the files under it, but will not also list the directory names under them.

I’ve tried a couple different things to accomplish this, but so far none have worked:

  1. find ~ -type d -name "bin" -exec ls '{}' ';' | grep -v /

I tested this and it will list the files, but it also list directories under whatever bin is there. So if I have a bin sub-directory under a bin directory that looks like this:

~/home/
   ~/home/bin
      file1.txt
      ~/home/bin/bin
         file2.txt

The output looks something like this:

bin
file1.txt
file2.txt
  1. find ~ -type d -name "bin" -exec ls -f '{}' ';'

I read that doing ls -f will list only files, but this unfortunately also lists the directories bin, .. and .

So how can I do this?

Asked By: Alex

||

With -path, you could try:

find ~ -path '*/bin/*' -type f

This won’t list bin itself, so to get both:

find ~ ( -path '*/bin/*' -type f ) -o ( -name bin -type d )
Answered By: muru

You can do this with nested find calls:

$ find ~ -type d -name bin -exec find '{}' -type f ';'

Since I’m replacing an ls call, perhaps you did not want more than one level of listing in the second find call. In that case, add -maxdepth 1 after -type f above.

Answered By: Warren Young
Categories: Answers Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.