9

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?

David542
  • 939
  • 3
  • 10
  • 15

5 Answers5

22

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'
mgorven
  • 30,615
  • 7
  • 79
  • 122
4

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.

Ladadadada
  • 26,337
  • 7
  • 59
  • 90
1

Almost!

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

or

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

otherwise the shell will interpret the * instead of find.

faker
  • 17,496
  • 2
  • 60
  • 70
  • \\* is a bit depended on the shell and the flavor of Unix. (Will work as intended on most systems though.) The quoted version will always work as far as I know. – Tonny May 24 '12 at 21:52
  • That's funny. Had to write \\\* to escape the escape. Very appropriate in this case. – Tonny May 24 '12 at 21:54
1

...or if mlocate runs on your computer and you don't need the most actual data use locate command

locate *.pam

It's faster becouse it finds files in previously created database; not on whole system.

stderr
  • 881
  • 6
  • 15
0
sudo find / | grep .pam

Think that should work.

user9517
  • 115,471
  • 20
  • 215
  • 297