Guest anon Posted July 16, 2005 Report Share Posted July 16, 2005 Copied from http://www.hcidata.info/find.htm Even done some work on a LINUX system and cannot remember where it was saved? Enter the super-heros of LINUX - the 'find' and 'xargs' commands. Each is a powerful command in its own right, but when combined produce very useful output. Find The Linux 'find' command will list files and directories that match the arguments to the command and pass specified tests. For example, to find all 'txt' files in the home directory, the following command can be used: find ~ -name *.txt The '~' means start at the user's home directory and the -name is a test which means list only files with that particular name. Find has many tests but some of the most useful for finding files that have been updated recently are the -mtime and -mmin tests. mmin This test is used to find files modified within 'n' minutes mtime This test is used to find files modified within 'n' days Some examples will make this clearer. Find All Files Modified in the Last 90 Minutes find ~ -mmin -90 Note that the number of minutes (90) is prefixed with a '-'. The reason for this will become apparent later. A sample output could be /home/linux /home/linux/dns/mysql-outfile /home/linux/dns/mysql-outfile/dnsx.txt /home/linux/dns/mysql-outfile/dnsx.doc It looks as if the 'find' command has listed files and directories. If we only want to see the files, add the -type test to the command to specify files only. find ~ -type f -mmin -90 The sample output would then become /home/linux/dns/mysql-outfile/dnsx.txt /home/linux/dns/mysql-outfile/dnsx.doc The information is now more concise, but which was the last file modified? You could issue a 'ls' command against each file in turn, but that could be very time consuming if there are more than a couple of files. What is needed is our other super-hero - xargs - with different powers. Adding Xargs to Find Xargs' power lies in the fact that it can take the output of one command, in this case find, and use that output as arguments to another command. So, using the basic find command above, let us pass the output of find to xargs and get xargs to issue multiple 'ls -l' commands. find ~ -type f -mmin -90 | xargs ls -l The sample output would then become -rw-rw-r-- 1 linux lunux 10209032 Jun 30 13:28 /home/linux/dns/mysql-outfile/dnsx.doc -rw-rw-rw- 1 mysql mysql 10209032 Jun 30 12:53 /home/linux/dns/mysql-outfile/dnsx.txt Negative, Positive and Unsigned Times In the above examples the number of minutes was specified as a negative number. This tell the find command that you wish to list files modified LESS THAN the specified number of minutes ago. If you had used a positive value, for example +300 , find would have returned a list of files modified MORE THAN 300 minutes ago. If you had used an unsigned value, for example 10 , find would have returned a list of files modified EXACTLY 10 minutes ago. This unsigned operand is not very useful for the mmins test. Find All Files Modified More Than 5 Years Ago In this example of the find and xargs command, will will use a positive time and the mtime test. The operand value to mtime is the number of 24 hour periods. It is not the number of days and the reason why will become apparent if you read 'man find'. So, to see files over 5 years old will will use +1825 as the value for mtime. We have ignored leap years in calculating 5 years as 5*365 days. The command issued is find ~ -type f -mtime +1825 |xargs ls -l A sample output could be -rw-r--r-- 1 linux linux 244 Jun 27 2000 /home/linux/marks/class4/ACCBLUE.TXT -rw-r--r-- 1 linux linux 12288 Jun 27 2000 /home/linux/marks/class4/ACCBLUE.XLS -rw-r--r-- 1 linux linux 266 Jun 27 2000 /home/linux/marks/class4/ACCCRABB.TXT -rw-r--r-- 1 linux linux 11776 Jun 27 2000 /home/linux/marks/class4/ACCCRABB.XLS -rw-r--r-- 1 linux linux 584 Jun 27 2000 /home/linux/marks/class4/Acclisa.txt -rw-r--r-- 1 linux linux 13824 Jun 27 2000 /home/linux/marks/class4/Acclisa.xls -rw-r--r-- 1 linux linux 264 Jun 27 2000 /home/linux/marks/class4/ACCPEAK.TXT -rw-r--r-- 1 linux linux 11776 Jun 27 2000 /home/linux/marks/class4/ACCPEAK.XLS -rw-r--r-- 1 linux linux 180 Jun 27 2000 /home/linux/marks/class4/ACCPHBH.TXT -rw-r--r-- 1 linux linux 12288 Jun 27 2000 /home/linux/marks/class4/ACCPHBH.XLS Tell xargs when to Quit One problem with the above approach is that a complete listing of the current directory will occur if the find command does not find any files! Xargs sees a list of zero files, but still issues the 'ls -l' command. To overcome this, simply use the xargs option '-r' which means If the standard input does not contain any nonblanks, do not run the command. So, our command now becomes: find ~ -type f -mtime +1825 |xargs -r ls -l Note that the '-r' is an xargs option and therefore comes after the xargs command name but before the command to be issued - in this case 'ls -l'. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.