Tips Linux Explorers   All Things Linux Forum   Great Linux Links   Hometown    


Sometimes there are tips that should have been posted long ago, but because they are less simple to explain, I never did find the time to set them up properly.
This one I found hanging around in my Pre-Tip directory for a long time, and today it is time to finally pick it up.

The "find" command is a command we use next to other commands like "locate" ( or "slocate" ) and "whereis" but it has a good few extra options we can use with it.
We can use "find" with a wild card ( * ), but it works best when we know the name of the file or directory we are looking for. ( NOTE: * does not replace a dot, so you can do "lilo.*" but not "lilo*" to find lilo.conf )

My advice is, read the text and experiment a bit to see how it works for you.

Okay, let's go for it, first step:

$ find -type f -name dummy

This is the basic way to use "find". If no path is given, it looks in the present directory and its subdirectories. Then we use the "-type f" to tell find it we are looking for a file ( f ) directory ( d ) or link ( l ) after that "-name dummy" to tell it we are looking for a file with the name "dummy" ( with wildcard "-name *ummy?" ).
You will see it will find the answer:


One step up:

$ find / -type f -name dummy 2>/dev/null

This time "find" not only searches the local directory, because the first argument we give it has to look in "/" ( the complete filesystem . . . . so that takes a while ) and because we give the command as "normal user" and not as root it would lead to a lot of "permission denied" messages if we did not add the last bit "2>/dev/null" ( See: The black hole )
On my Mandrake install the answer to this command is:


Another step up:

$ find / -type f -name dummy 2>/dev/null -exec cat {} \;

This time it does all the previous, but at the end of the command you see "-exec cat {} \;" . . . this means "-exec" execute the next command "cat" on the results found from the find command "{}" . . . . the "\;" means that the exec command ends there.
Again on my system the result is:


Now the final step up:

$ find / -type f -name dummy 2>/dev/null -exec cat {} \; >tesst.txt

Also, this time it has all the things listed above, but I added ">tesst.txt, which tells it to ">" write them in a file called "tesst.txt" instead. ( And not put the output on the screen )

So if you do not know where your lilo.conf file is located, but you want a copy of it for reading in your home directory, here is what you do:

$ find / -type f -name lilo.conf 2>/dev/null -exec cat {} \; >lilo.txt

And you will find a file called lilo.txt in your /home directory

And because I know you want to know more, here is the FUN step:

$ find /home -type f -name "*.sxw" -atime -3 -user bruno

Here we "find" in "/home" all "-type f files with the "-name" "*.sxw" so all OpenOffice sxw documents that "-atime -3" have been accessed in the last 3 days ( "-atime +3" would be: have NOT been accessed ) and that are owned by the "-user bruno" ( So basically: has anyone been messing with my files in the last 3 days ?? )
Additional tip: if you look for *.sxw, type "*.sxw" same goes for "*.txt", "*.doc" etc.etc.

Well, that is it for today, if you want to know even more, have a look at: man find


-- Dec 14 2004 ( Revised Dec 10 2005 ) --

Tips Linux Explorers   All Things Linux Forum   Great Linux Links   Hometown