You are on page 1of 9

F R I D AY, MA R C H 1 8 , 2 0 1 1

10 Example of find command in Unix and Linux

find command is one of the versatile command in UNIX and Linux
and I used it a lot in my day to day work. I believe having knowledge
of find command in UNIX and understanding of its different usage
will increase your productivity a lot in UNIX. If your works involve lots
of searching stuff on Linux machine or if you are a java or C++
programmer and your code resides in UNIX, find command can
greatly help you to look for any word inside your source file in the
absence of an IDE, It is the alternative way of searching things in
UNIX. grep is another Linux command which provides similar
functionality like find but in my opinion later is much more powerful
than grep in UNIX. Like any other command strength of find is lies
in its various options, which is worth learning, but to be frank hard to
remember. If you can even able to remember all options mentioned
in this article, you will be taking more advantage of find, than average developers and Linux users. If you love to read
books, you can also take a look at A Practical Guide to Linux Commands, Editors, and Shell Programming (2nd Edition) By
Mark G. Sobell, a great book and must read for any system administrator, security guy or developers, who works in UNIX
based environment. It not only teaches about find and grep, but also several useful commands, which probably gone
unnoticed by many of us
By the way, I have been sharing my experience on Unix and Linux command and its different options, usage and example
and this article is in continuation of my earlier post like How to convert IP address to hostname in Linux . If you are new here
you may find those tips useful for your day 2 day development and support work.
10 tips on find command in UNIX
Here I am listing down some of the way I use find in Unix or Linux box regularly, I hope this would help some one who is
new in UNIX find command or any developer who has started working on UNIX environment. this list is by no means
complete and just some of my favorites , if you have something to share please share via commenting.
How to run last executed find command in Unix Example 1
!find will repeat the last find command executed. It saves lot of time if you re searching for something and you need to
execute same command again and again. In fact "!" can be used with any command to invoke previous run of that
javin@testenv1 ~/java : !find
find . -name "*.java" --last find command executed
How to find files which has been modified less than one day, minute or hour in Unix:
find -mtime is used to search files based upon modification time. This is infact my favorite find command
tips while looking out some production issues just to check which files have been modified recently, could be
likely cause of issue, believe me it helps a lot and many a times gives you enough hint of any problem due to
intended or unintended file change. Along with mtime, there are two more options related to time, find
-atime which denote last accessed time of file and find ctime denotes last changed time. + sign is used
to search for greater than, - sign is used to search for less than and without sign is used for exact. For example find
mtime -1 will search all files which has been modified
javin@testenv1 ~/java : find . -mtime 1 (find all the files modified exact 1 day)
javin@testenv1 ~/java : find . -mtime -1 (find all the files modified less than 1 day)
javin@testenv1 ~/java : find . -mtime +1 (find all the files modified more than 1 day)
In this example since we have only modified some time back it has shown on find mtime -1, rest of
files are not touched today so they are appearing as modified more than 1 day while there is no file which has been modified
exactly one day.
How to find all the files and directories which holds the 777 permission in Unix box Exmaple 3
find perm option is used to find files based upon permissions. You can used find perm 444 to get all files which allows
read to owner, group and others. If you are not sure how those 777 and 444 numbers comes up, see my post on file and
directory permission in Unix and some chmod examples to change permissions in Unix.
+ 11,585
Follow +1
Best of Javarevisited
How Android works, Introduction for Java
Difference between Java and Scala Programming
Top 5 Java Programming Books for Developers
Top 10 JDBC Best Practices for Java programmers
Tips and Best practices to avoid
NullPointerException in Java
10 Object Oriented Design Principles Java
Programmer Should Know
10 HotSpot JVM Options, Every Java Programmer
Should Know
Subscribe To This Blog Free
Follow Us
Follow Follow @javinpaul @javinpaul 5,070 followers
Blog about Java programming language, FIX Protocol, Tibco Rendezvous and related Java technology stack.
Searching for unix find?
10 Example of nd command in Unix and Linux
1 of 9 27-03-2014 11:24
javin@testenv1:~/java $ find . -perm 644
I use this find command example to find out all the executable files, you can also modify it to find all the read only files or
files having write permission etc by changing permissions e.g. to find all read only files in current directory : find . perm
555 Here "." or period denotes current directory. You can replace it with any directory you want.
Example 4 Case insensitive search using find in Unix
How to do case insensitive search using find command in Unix? Use option -i" with name, by default find searches are
case sensitive. This option of find is extremely helpful while looking for errors and exceptions in log file.
find . iname "error" print ( -i is for ignore )
On a different note find and grep command is also a favorite topic during Unix interview and interview often asked questions
during interviews on both system admin and application developer jobs.
UNIX find command and xargs Example
Now we will see some UNIX find command example combined with xargs command, xargs can be used to do whatever
witch each file found by find command for example we can delete that file, list content of that file or can apply any comment
on that file.
Example 5 - How to delete temporary files using find command in Unix?
In order to delete files you can use either delete option of find command or use xargs in combination. Its better to create
house keeping script for such task which can perform cleanup on periodic basis.
find . -name "*.tmp" -print | xargs rm f
Use of xargs along with find gives you immense power to do whatever you want with each search result. See another
example below , also its worth considering use of -print0 to avoid problems with white space in the path when piping to
xargs (use with the xargs -0 option) as suggested by Ebon Elaza.
Example 6 - How to find all text file which contains word Exception using find command in Unix ?
find . name "*.java" print | xargs grep MemoryCache, this will search all java files starting from
current directory for word "MemoryCache". we can also leave -print option in all cases because its default for UNIX find
command as pointed out by Ben in comments. You can further sort result of find command using Sort command in unix.
find . name "*.txt" print | xargs grep "Exception"
Example 7 - Finding files only in current directory not searching on sub directories:
While using find command I realized that some time I only need to find files and directories that are new , only in the current
directory so I modified the find command as follows. type option can be used to specifiy search for only file, link or directory
and maxdepth specifies how deep find has to search.
find . -maxdepth 1 -type f -newer first_file
Another way of doing it is below:
find . -type f -cmin 15 -prune
Means type file, last modified 15 minutes ago, only look at the current directory. (No sub-directories)
Example 8 How to find files based on size in Unix and Linux
Following find example shows how you can use find size option to find files based upon certain size. This will find all files in
current directory and sub-directory, greater than some size using find command in Unix:
find . -size +1000c -exec ls -l {} \;
Always use a c after the number, and specify the size in bytes, otherwise you will get confuse because find -size list files
based on size of disk block. to find files using a range of file sizes, a minus or plus sign can be specified before the number.
The minus sign means "less than," and the plus sign means "greater than." Suppose if you want to find all the files within a
range you can use find command as in below example of find:
find . -size +10000c -size -50000c -print
This find example lists all files that are greater than 10,000 bytes, but less than 50,000 bytes:
Example 9 How to find files some days older and above certain size
We can combine mtime and size to find files which are some days old and greater than some size in Unix. Very common
scenario where you want to delete some large old files to free some space in your machine. This example of find command
will find which are more than 10 days old and size greater than 50K.
find . -mtime +10 -size +50000c -exec ls -l {} \;
10) You can use "awk" in combination of find to print a formatted output e.g. next command will find all of the symbolic
links in your home directory, and print the files your symbolic links points to:
Join this site
with Google Friend Connect
Members (1809) More
Already a member? Sign in
Subscribe by email:
By Javin Paul
Blog Archive
2014 ( 29 )
2013 ( 136 )
2012 ( 217 )
2011 ( 145 )
December ( 28 )
November ( 14 )
October ( 14 )
September ( 22 )
August ( 11 )
July ( 7 )
June ( 9 )
May ( 6 )
April ( 10 )
March ( 4 )
10 tips on working fast in UNIX or Linux
10 Example of find command in Unix and Linux
Top 20 FIX Protocol Interview Questions
10 Singleton Pattern Interview questions in Java
February ( 10 )
8,602 people like Javarevisited.
Facebook social plugin
Like Like
Find Command Unix Example
Unix Executable File
Searching for unix find?
10 Example of nd command in Unix and Linux
2 of 9 27-03-2014 11:24
find . -type l -print | xargs ls -ld | awk '{print $10}'
"." says starts from current directory and include all sub directory and "-type l" says list all links.
Hope you find this useful , please share how you are using find commands and we can benefit from each others experience
and work more efficiently in UNIX.
$* : $* is one of the special bash parameter which is used to expands positional parameters from position one.
if you give double quotes and expansion is done within double quotes, it only expands to a single word and corresponding
value of each parameter will be separated by the first letter of the IFS environment variable defined in bash. Do let me know
how do you find these find examples .
How to use find command on file names with space in Unix:
I have received lot of comments from my readers on not mentioning about find -print0 and xargs -0 on find examples, so I
thought to include this as well. When we don't specify any expression after find command the default option is -print which
prints the name of each found files followed by \n or newline.since we mostly pipe output of find command to xargs -print
could cause problem if file name itself contain new line or any form of white space. To resolve this issue instead of -print
use -print0. Difference between find -print and find -print0 is, print0 display file name on the stdout followed by a "NUL"
character and then you can use xargs -0 command to process file names with null character. let's see UNIX find command
example with file name having space in them:
javin@testenv1:~/test find . -name "*equity*" -print
./cash equity trading ./equity~
You see here "cash equity trading" has space in there name
javin@testenv1:~/test find . -name "*equity*" -print | xargs ls -l
ls: cannot access ./cash: No such file or directory
ls: cannot access equity: No such file or directory
ls: cannot access trading: No such file or directory
-r--r--r-- 1 stock_trading cash_domain trading 0 Jul 15 11:42 ./equity~
Now if we pass this to xargs, xargs treat them as three separate files.
javin@testenv1:~/test find . -name "*equity*" -print0 | xargs ls
xargs: WARNING: a NUL character occurred in the input. It cannot be passed through in
the argument list. Did you mean to use the --null option?
ls: cannot access ./cash: No such file or directory
ls: cannot access equity: No such file or directory
ls: cannot access trading: No such file or directory
Now to solve this we have used find command with -print0 which appends NUL character on file name but without xargs -0,
xargs will not able to handle those inputs.
javin@testenv1:~/test find . -name "*equity*" -print0 | xargs -0 ls -l
-rw-r--r-- 1 stock_trading cash_domain trading 0 Jul 21 09:54 ./cash equity trading
-r--r--r-- 1 stock_trading cash_domain trading 0 Jul 15 11:42 ./equity~
Now you can see with find -print0| xargs -0 it looks good
In conclusion always use find -print0 along with xargs -0 if you see slightest possibilities of file names containing space in
UNIX or Linux.
Important point about find command in Unix and Linux:
Here are some of the important and interesting things to know about powerful find command, most of these points are
contributed by various people in comments and big thanks to all of them for sharing there knowledge, you should definitely
check out comments to know more about find command :
1. find print and find is same as print is a default option of find command.
2. find print0 should be used to avoid any issue with white space in file name or path while forwarding output to xargs,
also use xargs -0 along with find print0.
3. find has an option called delete which can be used in place of -exec rm {} \;
Further Reading
A Practical Guide to Linux Commands, Editors, and Shell Programming (2nd Edition) By Mark G. Sobell
The Linux Command Line: A Complete Introduction by William E. Shotts Jr
Related post:
10 example of networking command in Unix
10 Example of tar command in Unix
5 Example of kill command in Unix and Linux
VI Editor examples and tips for beginners
Unix command tutorials for beginners and intermediate
2010 ( 33 )
Java API documentation JDK 6
Spring framework doc
Copyright by Javin Paul 2012. Powered by Blogger.
Searching for unix find?
10 Example of nd command in Unix and Linux
3 of 9 27-03-2014 11:24
For Beginners Music Production Free people search Modifications 15 Minute
Recommended by
Posted by Javin Paul at 8:45 PM
Labels: linux , unix
Location: United States
Servers Important Security System How To Fridays For Beginners
Music Production Free people search Modifications 15 Minute Servers
Ben Williams said...
Excellent examples, but did you know you can omit all of those "-print" parameters? Print is the default command
for find.
March 19, 2011 at 5:52 AM
Hobbit said...
Piping a list of file nnames through "xargs grep" will fail if "find" locates files that contain spaces in their names,
since by default "xargs" splits the incoming list on spaces. In that case, use "-print0" on the "find" command to
separate file names with nulls, and "-0" on "xargs" to tell it the file names are null separated.
For example,
$ cd ~/Documents
$ find . -name '*.txt' -print0 | xargs -0 grep -i 'some text'
Note I've also quoted '*.txt' on the find command to prevent the shell from expanding any file names in the current
directory that may end with '.txt'.
March 19, 2011 at 7:23 AM
Eric Promislow said...
When using xargs and you know some files will contain spaces, use -print0 and -0, like so:
find . ... -print0 | xargs -0 cmd
The -print0 separates its output with null bytes, and -0 tells xargs its args are separated by null bytes. Especially
good for cygwin users dealing with files created by non-programmers.
March 19, 2011 at 8:33 AM
Anonymous said...
For the "xargs ls -l", there is a find option "-ls" that performs the same in my experience.
March 19, 2011 at 8:45 AM
Javin said...
Thanks Anonymous for letting us know about "-ls" option with find , I usually use xargs with many commands so it
became an habit.
March 19, 2011 at 6:49 PM
Javin said...
Hi Eric , Ebon , Thomas and Hobbit Thanks for bringing point about "print0" , I missed that but its indeed worth to
March 19, 2011 at 6:55 PM
Anonymous said...
how about using `find . -type f -name "*.txt" -exec rm -f {} \;` instead of xarg?
March 22, 2011 at 3:18 PM
Sharad Jadhav said...
options parser in C++11
Parsing command line arguments. auto config file, doc, sub command
You might like:
How Synchronization works in Java ? Example of synchronized block
How to write Production quality code?
Java Enum Tutorial: 10 Examples of Enum in Java
How to increase java heap space on Maven and ANT
+86 Recommend this on Google
Searching for unix find?
10 Example of nd command in Unix and Linux
4 of 9 27-03-2014 11:24
Nice post Javin
This is my new blog
April 6, 2011 at 7:56 PM
Javin Paul said...
Hi Anonymous,
you are right we can use `find . -type f -name "*.txt" -exec rm -f {} \;` instead of xarg as well , both will serve the
same purpose. I am bit more comfortable with xargs then -exec so I prefer to use xargs along with find command in
unix but you can use -exec as well.
April 15, 2011 at 8:51 PM
Anonymous said...
Hi Anonymous,
instead of -exec rm {} \; you may want to use the -delete option of the find command.
April 24, 2011 at 10:24 AM
Anonymous said...
Your prune example does not work on Solaris. It still brings back subdirectories.
find . -type f -mtime +5 -prune
Brings back all subdirectories. The following prune works, but the -mtime +5 doesn't work. So I still cannot figure
out how the -prune works.
find . \( -name "*/output/*" -o -name "*/logs/*" \) -prune -mtime +5 -print
June 23, 2011 at 11:29 AM
Anonymous said...
find . -name *.log -print | xargs grep "ERROR"
above command wont run..becoz there is no quotes in throws
paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
Below is the corrected command:
find . -name "*.tmp" -print | xargs grep "ERROR"
June 25, 2011 at 9:05 PM
Anonymous said...
unix find command is something like google search in unix. I really love your practical UNIX command examples. I
know when I started working in unix and now after learning find command in unix how much difference it make.
unix find command is most powerful utility I come across.
July 2, 2011 at 3:12 AM
Anonymous said...
does anyone know what is these special characters $* , $@, $$, $#, #_, $?, specially $@ and $# I can see this in most
of bash script but don't understand it. $# mostly seen on top.
July 7, 2011 at 12:57 AM
Javin @ find command in unix said...
Hi Anonymous, $* or $# or $@ are special bash parameters they have special meaning inside bash script, $# is used
to count number of element, $$ used to get process ID , $* and $@ are similar and used to expand positional
parameter but they behave differently if they come inside double quotes, $? is used to get exit status of last
executed command and $! is used to get process ID of most recent executed command, you can get detailed
description here list of special bash parameters in Unix
July 7, 2011 at 5:20 AM
Anonymous said...
how about grep command , do you also use grep command in unix or you just use find command. I know unix find
command is great but I have found unix grep more easy to use than find command. Its personal choice but find and
grep are both powerful and effective.
July 11, 2011 at 11:37 PM
Anonymous said...
fantastic examples of find command, though some find examples are ok, I like most of examples and looking
forward for more tips on unix find command.
Searching for unix find?
10 Example of nd command in Unix and Linux
5 of 9 27-03-2014 11:24
July 12, 2011 at 7:23 PM
Radhika said...
Hi, I am working on support for electronic trading DMA (Direct to market) access system. which is used to trade
cash equities, stocks and system is client connectivity system which connect to different client using
FIX Protocol and I want to thank your for your Unix tips on find command and your tips on FIX Protocol, I have
benefited a lot.
July 17, 2011 at 2:02 AM
Anonymous said...
your find examples will fail if any file will contain spaces in between them. you should use -print0 with find and -0
with xargs to safely handle files which has space in there name.
July 20, 2011 at 8:27 PM
Anonymous said...
Can we use grep command in unix in place of unix find command whenever required. I find syntax of grep is more
easy than find command and wanted to use grep as much possible than unix find command.
July 27, 2011 at 6:09 PM
unixcommandlearner said...
@Anonymous, both find and grep commands has there own place and both can be used though I see unix find
command more powerful than grep command in unix.
August 3, 2011 at 6:55 PM
Anonymous said...
Hi Guys.... The post is quiet useful. Came across this while trying to get a solution to another problem, am stuck
in. So thought to share it here.
I have a set of XML Files in a directory, and I need to rename it according to business requirements. The
requirement says, that I need to rename the files to a value of an element in the XML File.
Say the XML file, has an element named ; with value as 987654. Now I need to take this value '987654', and rename
my file to 987654.xml .
I am trying to get it through a UNIX Shell script, but getting stuck some where or the other.
Any help or hint will be very much helpful....!!!!
August 26, 2011 at 5:40 AM
Anonymous said...
unix find command is my favorite. completely agree with power of find command and thank for those unix find
examples extremely useful for beginners.
September 1, 2011 at 9:57 PM
Anonymous said...
HI I have one question,
i have some jar files in a directory and in subdirectories , i need to find the jar having some filename , how come
we do using the find command ?
October 20, 2011 at 3:02 AM
Anonymous said...
Poor old Unix! Any good file manager could/should do this with a few clicks without the need of such cryptic
commands. Why these commands are not more intuitiv? This is still 1970's style where every bit and byte counted
but nowadays it should be more ergonomic and user (not nerd) oriented - even on a text console. It would be great
that Unix evolves this way one day.
November 2, 2011 at 5:21 AM
chinuku said...
Hi, my requirment is i want to see the last modified file in my directory using find?
January 4, 2012 at 2:26 AM
Anonymous said...
guys can get more details about find command on
January 6, 2012 at 1:56 PM
Joe said...
thanks a lot for this find one liners in Linux. I have been using your find command in Linux and Unix operating
system from last few weeks and it helped me a lot. I also liked your grep command tutorial in Unix and Linux .those
are my favorite. please do share some more useful unix and Linux command examples.
January 24, 2012 at 5:50 PM
Anonymous said...
Searching for unix find?
10 Example of nd command in Unix and Linux
6 of 9 27-03-2014 11:24
I think best example of find command in unix is finding files by modified time, creation time etc. but power of unix
find command is you can not only find files by names, types, modified time but also on several other attributes of
file like finding read only files, finding all executable files in linux etc.
January 29, 2012 at 8:55 PM
Prasanth said...
Very good examples. All are very much useful in the daily work of any one who uses UNIX.Thanks ,,,
March 12, 2012 at 12:16 PM
Anonymous said...
unix command to find last modified file and time of file/directory
March 21, 2012 at 11:18 PM
find said...
@Anonymous you can use 'ls -lrt' to find last modified file and time. find can only search files in range of time
specified by -mtime I guess.
June 3, 2012 at 6:41 PM
Pushkar khanna said...
few of my own find command tips :
man find | grep --context=5 regex
This is my way to know about any find command line option , it will find word regex and print 5 lines around it,
which is more than enough to know about how to use find with regex option
find -regex '.*.html'
-regex allows you to apply regular expression along with find. it apply regular expression on path name, instead of
search for file. Since all files in current directory starts with . it matches pattern starts with . than any character
any number of time and ending with .html
find -depth is another option which is similar to find -maxdepth
June 14, 2012 at 8:10 PM
Anonymous said...
fantastic tutorial on find command. You have done an awesome job by compiling these examples on find command.
I always forget different options like -mtime or -size, now I can simply take a printout of this and have with me.
June 27, 2012 at 6:23 PM
Anonymous said...
When i use the find command, it gives me the complete path of the file (/home/.../.txt). Is there any way by
which I can only get the without the complete path?
August 27, 2012 at 2:57 AM
Anonymous said...
@ Anonymous written on August 27.... From my small understanding of unix, you could type a command that uses
piping using a keyword: ls /home | grep keyword | more
I believe that would show it.
September 3, 2012 at 4:26 PM
Solaris dude said...
Another useful example of find command is that you can you can use find command to find all soft link in any
directory on any UNIX based operating system e.g. Linux, Solaris or BSD. by using find -type you can see all
symbolic links :
find /home/username -type -l -print
will display all soft links in /home/username directory. isn't it great use of find command ?
September 20, 2012 at 10:58 PM
Rohan said...
Hi, I want to find all files which is more than one month old in Unix box, particularly in log directory and then want
to create a tar file or zip file of that with name as file-month-year e.g. app-december-2012.tar or .gz. I have
figured out command to find all files which are more than 31 days old in log directory e.g.
find . -type f -mtime +31 -print
but I don't know how to create a tar file out of them and later remove all those files from directory. Please share
UNIX script for doing that.
January 6, 2013 at 7:52 PM
Anonymous said...
this blog helped a lot...thanks...keep continuing for other commands
Searching for unix find?
10 Example of nd command in Unix and Linux
7 of 9 27-03-2014 11:24
January 28, 2014 at 4:02 AM
Anonymous said...
is there any way to run just ones "find" and output to 4 different files based on different mtime ?
find /DATA/HR -type f -mtime -30 -ls >> $data_feed/hr/dlt30.dat
find /DATA/HR -type f -mtime +30 -mtime -60 -ls >> $data_feed/hr/d30to60.dat
find /DATA/HR -type f -mtime +60 -mtime -90 -ls >> $data_feed/hr/d60to90.dat
find /DATA/HR -type f -mtime +90 -mtime -182 -ls >> $data_feed/hr/m3to6.dat
January 28, 2014 at 1:39 PM
Anonymous said...
what is find command to search a file in linux?
What is find command to find a string in file unix
what is find command to search a string in a file?
what is find command to delete files
What is find command to find large files in unix
March 4, 2014 at 7:53 PM
Anonymous said...
you're not doing yourself any favors for asking for answers to your homework. figuring it out on your own is parting
the learning process! read the man page!
March 5, 2014 at 7:18 AM
Anonymous said...
Instead of xargs -0 one can also use xargs --null option to work with files with space. Its very useful to find some
files in directory and then find something inside those files. I love this command truly powerful.
find . -name "*.txt" print0 | xargs --null grep "John"
March 27, 2014 at 12:42 AM
Post a Comment
Comment as: Select profile...
Publish Publish Preview Preview
Searching for unix find?
10 Example of nd command in Unix and Linux
8 of 9 27-03-2014 11:24
Newer Post Older Post Home
Subscribe to: Post Comments ( Atom )
About Me Privacy Policy
Searching for unix find?
10 Example of nd command in Unix and Linux
9 of 9 27-03-2014 11:24