How do I exclude directories when listing files?

How do I exclude directories when listing files in the current directory?

ls .

^ will include directories in the listing.


Try this one:

find . -maxdepth 1 -not -type d

To get it exactly equivalent to ls . you need to not show hidden dirs.

find . -maxdepth 1 -not -type d -and -not -name '.*'

and that still leaves you with './' prefixed to each filename. That's not really an issue, but I think it's kinda ugly. I went with:

ls -p | grep -v '/$'

And that will get you a listing that looks the same, and you can add additional ls arguments too. Add a --color=always and you'll get your dircolors back, or -a to see hidden files.

I like Alexander's answer because he's actually depending on a filesystem characteristic of the file in question so it won't get fooled ever. My answer will get fooled by a file that has a '/' as the last character in it's name. But that seems like it's asking for trouble.


try this:

$ find . -maxdepth 1 -type f

or this:

$ ls -p | egrep -v /$

$ ls -la | egrep -v ^d


Though it's an old post, but i thought this might help..

$ ls -l |grep -v ^d

It will list all the files including symlinks,character and block files.