How to find all filenames with given extension

I need to find all .pem files on my system. Would the following do this?

sudo find / -type f -name *.pem

If not, how would I write a find command to find every file of the sort?


Solution 1:

You're on the right track -- you just need to quote the pattern so that it gets interpreted by find and not by your shell:

sudo find / -type f -name '*.pem'

Solution 2:

Using find / will normally be very slow. Using locate is much faster but somewhat imprecise because it doesn't support anything more complex than substring matching. A directory called .pembroke will be found and returned by locate along with every file inside it.

A combination of locate and grep, however, has speed and precision. Conveniently, it also does not require sudo.

locate .pem | grep "\.pem$"

The downside? The database locate uses is normally only updated once per day so any recent changes (additions, deletions, name changes, etc.) will not be found.

Solution 3:

Almost!

sudo find / -type f -name \*.pem

or

sudo find / -type f -name "*.pem"

otherwise the shell will interpret the * instead of find.