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:


The output looks something like this:

  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?

2 Answers 2


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

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.

You must log in to answer this question.

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