Finding Files On The Command Line

[Không rõ 2010/11/17 09:09 | by Admin ]

One of the things I like about Linux is the command line. I have used  nautilus, gnome-commander, konqueror, kommander, dolphin and thunar to  manage files in Linux and these file managers are great for what they  do. But there are times when one simply wants to find a file when  working on the command line without having to open a GUI application.

  

From the find man page:

GNU  find searches the directory tree rooted at each given file name by  evaluating the given expression from left to right, according to the  rules of precedence until the outcome is known at which point find moves  on to the next file name.

Find empty directories:

find /path -depth -type d -empty

  

Find empty files:

find /path -depth -type f -empty

  

Find a file with a specific name:

find /path -name name_of_file

  

Find a files with specific extensions:

find /path -name "*.given_extension"

  

Find files with specific permissions which have a ".txt. file extension:

find /path -name '*.txt' -perm 644

  

Find files with some given permissions:

find /path -perm -permision_bits

  

Find files with a given name and any extension:

find /path -name 'given_name.*'

  

Find files modified in the latest blocks of 24 hours:

find /path -mtime n

  

Where n is:

  • 0 for the last 24 hours
  • 1 for the last 48 hours
  • 2 for the last 72 hours

Find files that were accessed in the latest blocks of 24 hours:

find -atime n

  

Where n is:

  • 0 for the last 24 hours
  • 1 for the last 48 hours
  • 2 for the last 72 hours

Find files according to owner:

find /path -user root

  

One can also pipe find commands to the xargs command to execute commands on files.

Find and delete files:

find /path -name mytestfile | xargs rm

  

See man find and man xargs for more information about these powerful commands.

  

Many  new Linux users are intimidated by the command line and this feeling  should be overcome from the onset because the command line can be faster  and more powerful than most GUI applications.

 

I find the "find" command very useful when some databases get corrupted. I use:

  

find /var/db/mysql -name "*.MYI" -exec myisamchk -r '{}' \;

 

To significantly speed up deletion of large numbers of files, finish the find command with a +, not a \;, thus:
find /path -iname "*somefile*" -exec rm "{}" +

Here is how you can find large files (or files larger then %)

find / -type f -size +10000k -exec ls -lh {} \; | awk '{ print $8 ": " $5 }'


An alternative way to find and delete files using only find.

find /path -name mytestfile -exec rm '{}' \;

Everything between -exec and \; get executed per file, and '{}' is replaced with the name of the file found.

This can be used to do just about anything with files. So for example, find and delete all CVS folders in a project:

  

find /path -name CVS -type d -exec rm -r '{}' \;

Create and md5 hash of all files in a folder

  

find /home/williamb/ -type f -exec md5sum '{}' \;



REFERENCE

http://www.howtoforge.com/finding-files-on-the-command-line


                How to find files in Linux using 'find'

Files                    can be found under Linux in many different ways.  Using the find                   tool is one of the best ways to find  files. The find tool has                   a huge number of parameters  which can be set so that Linux finds                   exactly those  files that you were searching for. Many users                   use the  find tool with just the basic parameters. They get the                    results that they were looking for. Unfortunately most of the                    users don't spend time to learn all about find. If they do,                    they can make excellent use of this tool and I am sure  you would                   be surprised at the possibilities.
                
                  In case you just want to know where a particular file  exists                   on your system, and nothing else is required,  then use locate                   tool. Article No.20 explains how to use                   locate.
                
                
                 Here are a few ways to use find
                
                 -
                
                 $ find / -name 'program.c' 2>/dev/null
                 $ find / -name 'program.c' 2>errors.txt
                

                                                                                                                                                                                                                                                                                                                                   
                      
/
                    
 Start                       searching from the root directory (i.e / directory)
                      
-name
                    
 Given                       search text is the filename rather than any other attribute                       of a file
                      
'program.c'
                    
 Search                        text that we have entered. Always enclose the  filename in                       single quotes.. why to do this is  complex.. so simply do                       so.
                

                   Note :  2>/dev/null                   is not related to find tool as such. 2  indicates the error stream                   in Linux, and /dev/null is  the device where anything you send                   simply disappears.  So 2>/dev/null in this case means that                   while  finding for the files, in case any error messages pop                    up simply send them to /dev/null i.e. simply discard all error                    messages.
                
                 Alternatively  you could use 2>error.txt where after the search                    is completed you would have a file named error.txt in the current                    directory with all the error messages in it.
                

                 -
                

                $                   find /home/david -name 'index*'
                 $ find /home/david -iname 'index*'
                
The  1st command would find files having the letters index                    as the beginning of the file name. The search would be started                    in the directory /home/david and carry on within that  directory                   and its subdirectories only.
                  The 2nd command would search for the same, but the case of the                    filename wouldn't be considered. So all files starting  with                   any combination of letters in upper and lower  case such as INDEX                   or indEX or index would be  returned.
                
                 -
                
                 $ find -name met*
                  The above command would start searching for the files  that begin                   with the letters 'met' within the current  directory and the                   directories that are present within  the current directory. Since                   the directory is not  specified as the the second parameter,                   Linux defaults  to using the current directory as the one to                   start the  search in.
                
                 -
                
                 $ find /mp3collection -name '*.mp3' -size -5000k
                 $ find / -size +10000k
                
The  1st command would find within a directory called /mp3collection,                    only those mp3 files that have a size less than 5000  Kilobytes                   ( < 5MB)
                 The 2nd  command would search from the / directory for any file                    that is larger than 10000k (> 10MB)
                
                 -
                
                 $ find /home/david -amin -10 -name '*.c'
                 $ find /home/david -atime -2 -name '*.c'
                 $ find /home/david -mmin -10 -name '*.c'
                 $ find /home/david -mtime -2 -name '*.c'
                

                  The 1st commmand searches for those files that are  present in                   the directory /home/david and its  subdirectoires which end in                   .c and which have been  accessed in the last 10 minutes.
                 The 2nd command  does the same but searches for those files that                   have  been accessed in the last 10 hours.
                 The 3rd and the  4th commands do the same as the 1st and 2nd                   commands  but they search for modified files rather than accessed                    files. Only if the contents of the files have been modified,                    would their names be returned in the search results.
                
                 -
                
                 $ find / -mount -name 'win*'
                  This command searches for files starting with the  letters 'win'                   in their filenames. The only difference  is that the mounted                   filesystems would not be searched  for this time. This is useful                   when you have your  Windows partitions mounted by default. And                   a search  for 'win' might return many files on those partitions,                    which you may not be really interested in. This is only one                    use of -mount parameter.
                
                 -
                
                
$                   find /mp3-collection -name 'Metallica*' -and -size +10000k
                 $ find /mp3-collection -size +10000k ! -name "Metallica*"
                 $ find /mp3-collection -name 'Metallica*' -or -size +10000k
                
Boolean                   operators such as AND, OR and NOT make find an extremely useful                   tool.
                  The 1st command searches within the directory  /mp3-collection                   for files that have their names  beginning with 'Metallica' and                   whose size is greater  than 10000 kilobytes (> 10 MB).
                 The 2nd command  searches in the same directory as above case                   but only  for files that are greater than 10MB, but they should                    not have 'Metallica' as the starting of their filenames.
                  The 3rd command searches in the same directory for files that                    begin with 'Metallica' in their names or all the files that                    are greater than 10 MB in size.
                
                 -
                
                 T
he                   exec  option is probably the most important feature of                   the  find tool. The exec command allows you to execute a particular                    command on the results of the find command. A simple  demonstration                   of this feature is shown below. Its upto  your imagination to                   make maximum use of this feature.  Suppose you wanted to see                   the details of the files  (read, write, execute permission, file                   size, owner  etc..) that have been returned as a search result                   you  could do the following
                
                 $ find / - name 'Metallica*' -exec ls -l {\}\ \;
                
                  This command would find all the files on your system  that begin                   with the letters 'Metallica' and would then  execute the 'ls                   -l' command on these files. So  basically you would be able to                   see the details of the  files that were returned according to                   your search  criteria.
                
                 The words following  the -exec option is the command that you                   want to  execute i.e. ls -l in this case.
                 {\}\ is basically  an indicator that the filenames returned by                   the search  should be substituted here.
                 \; is the terminating string, and is required at the end of                   the command

REFERENCE

http://www.codecoffee.com/tipsforlinux/articles/21.html

Bài viết số 362 đã được: 0.0/10 (0 Đánh giá)

Chia Sẻ
Linux | Nhận xét(0) | Trích dẫn(0) | Đọc(374)
Viết nhận xét
Hình vui
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
Mở HTML
Mở UBB
Mở hình vui
Ẩn giấu
Tên gọi   Mật khẩu   Khách không cần mật khẩu
Địa chỉ web   Email   [Đăng ký]