Linux/Unix CLI “find” examples.

One of the handiest commands I use in Linux is the “find” command. It lets me search for files, either by name or content. When you have gigabytes of data, “find” quickly becomes your best friend. The following is the contents of my “find.txt” file where I keep examples. Feel free to copy and paste into your own “find.txt”.

------------------------------------------------------------------------------------------
remove empty directories
------------------------------------------------------------------------------------------
# find . -depth -type d -empty -exec rmdir {} \;

------------------------------------------------------------------------------------------
change various file attributes
------------------------------------------------------------------------------------------
# find . -type f -exec chgrp users {} \;
# find . -type f -exec chmod 644 {} \;
# find . -type d -exec chmod 755 {} \;

------------------------------------------------------------------------------------------
find all 'iso' files (case insensitive)
------------------------------------------------------------------------------------------
find -iname '*.iso'

example output:
./Documents/ubuntu-10.04.1-server-i386.iso
./photos.iso
./pauls_wedding_video.iso
./CentOS-5.3-i386-bin-DVD/CentOS-5.3-i386-bin-DVD.iso

------------------------------------------------------------------------------------------
Find all the file with the name 'ruby' in them. (starts in the current directory)
Note:
-name is case sensitive
-iname is insensitve
------------------------------------------------------------------------------------------
# find -name ruby

example output:
./Download/jruby-1.1.5/lib/ruby
./.gem/ruby

------------------------------------------------------------------------------------------
find all the pdf files > 10M and list their details
Note: {} stands for the file name, \; terminates the command
(the output below is little ugly because of word-wrap)
------------------------------------------------------------------------------------------
# find . -iname '*.pdf' -and -size +10M -exec ls -l {} \;

example output:
-rw-rw-r-- 1 chuck chuck 11173003 2008-11-07 06:14 ./Desktop/SecurityPlus.PDF
-rw-rw-r-- 1 chuck chuck 12857446 2009-04-17 13:55 ./Documents/RoR/Railspace/Railspace.pdf
-rw-rw-r-- 1 chuck chuck 12894140 2009-08-18 15:01 ./Documents/Calculus, Applications and Theory.pdf
-rw-rw-r-- 1 chuck chuck 29461154 2009-10-10 17:13 ./Documents/PDF's/Learning the vi and Vim Editors, 7th Edition.pdf
-rw-rw-r-- 1 chuck chuck 12857446 2009-04-17 13:55 ./Documents/PDF's/Railspace.pdf

------------------------------------------------------------------------------------------
find all txt files in current directory that contain "ruby"
------------------------------------------------------------------------------------------
find . -iname "*.txt" -print0 |xargs -0 grep ruby

------------------------------------------------------------------------------------------
find all php files in current and sup-directories that contain "legend". list names only.
------------------------------------------------------------------------------------------
find . -iname '*.php' -exec grep -l "legend" {} \;

example output:
./login.php
./includes/customer_form.html.php
./customers/form.html.php
./customers/orginal_form.html.php
./customer_record2.php

------------------------------------------------------------------------------------------
find all subdirs and set excutiable bit:
Note: {} stands for the file name, \; terminates the command
------------------------------------------------------------------------------------------
find * -type d -exec chmod a+x {} \;

------------------------------------------------------------------------------------------
find all extentions in subdirectories
------------------------------------------------------------------------------------------
find . -type f | sed -e 's/.*\.//' | sort | uniq -c | sort -rn

example output:
10 htm
7 jpg
4 gif
1 css

------------------------------------------------------------------------------------------
change extension of all files from .html to .htm in all subdirectoies
------------------------------------------------------------------------------------------
find . -iname "*.html" | xargs rename .html .htm {} \;

------------------------------------------------------------------------------------------
fix file permissions (e.g. after copy from usbdrive)
------------------------------------------------------------------------------------------
find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \;

example output:
drwxrwxr-x 2 chuck chuck 4096 2010-05-05 10:21 my_directory/
-rw-rw-r-- 1 chuck chuck 300 2010-05-07 18:14 my_file.txt

------------------------------------------------------------------------------------------
find all the *.ini files in home directory but ignore hidden directories
(note: -print needed to print. not sure why. maybe because of the "or" (-o)
------------------------------------------------------------------------------------------
find ~/ -type d -name "*.*" -prune -o -iname "*.ini" -print

------------------------------------------------------------------------------------------
find all *.ico files on computer but ignore directories named "win7", "share", "doc"
(note: -print is important on this. see above)
------------------------------------------------------------------------------------------
find / -type d \( -name win7 -o -name share -o -name doc \) -prune -o -iname "*.ico" -print

------------------------------------------------------------------------------------------
delete all files like 'my_music_file 1.m4a'
------------------------------------------------------------------------------------------
find . -iname '* 1.m4a' -exec rm {} \;

2 Responses to “Linux/Unix CLI “find” examples.”

  1. find command examples : Sathya Says Says:

    […] Linux/Unix CLI “find” examples. « Useless Posts from Tigard. […]

  2. chuck Says:

    I’m happy to share examples with others. Please feel free to copy and paste. It would be nice to have attribution but not required. 🙂

Leave a comment