SYNOPSIS

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

Example 1 : the simple one, find a file then print it out

root@ubuntu2004:~# find /etc -name hosts
/etc/avahi/hosts
/etc/hosts

Example 2 : find files using regular expression

root@ubuntu2004:~# find /etc -name "*switc*.conf"
/etc/usb_modeswitch.conf
/etc/nsswitch.conf

Example 4 : find files with name case insensitive

root@ubuntu2004:~# find /etc -iname "*SWITC*.conf"
/etc/dbus-1/system.d/net.hadess.SwitcherooControl.conf
/etc/usb_modeswitch.conf
/etc/nsswitch.conf

Example 5: find file’s type is file or directory or symblic link then print

j@ubuntu2004:~$ find tmpdir -type f,d,l
tmpdir
tmpdir/filelink
tmpdir/file
tmpdir/dir1
tmpdir/dir3
tmpdir/dir2
j@ubuntu2004:~$ tree tmpdir/
tmpdir/
├── dir1
├── dir2
├── dir3
├── file
└── filelink -> file

3 directories, 2 files
j@ubuntu2004:~$

Example 6 : find files , exclude 2 directories

j@ubuntu2004:~$ tree tmpdir
tmpdir
├── dir1
│   └── file1
├── dir2
│   └── file2
└── dir3
    └── file3

3 directories, 3 files
j@ubuntu2004:~$ find tmpdir \( -path "tmpdir/dir1" -o -path "tmpdir/dir2" \) -prune -o -print
tmpdir
tmpdir/dir3
tmpdir/dir3/file3
j@ubuntu2004:~$

Example 7 : find files then delete them

j@ubuntu2004:~$ ls tmpdir/
1.txt  a.txt  dir1  dir2  dir3
j@ubuntu2004:~$ find tmpdir -name "*.txt" -delete
j@ubuntu2004:~$ ls tmpdir/
dir1  dir2  dir3

Example 8: find files ,delete them but ask user first

j@ubuntu2004:~$ ls tmpdir
a.txt  b.txt  dir1  dir2  dir3
j@ubuntu2004:~$ find tmpdir -name "*.txt" -ok rm '{}' \;
< rm ... tmpdir/a.txt > ? y
< rm ... tmpdir/b.txt > ? n
j@ubuntu2004:~$ ls tmpdir
b.txt  dir1  dir2  dir3

Examples 9: find files larger than 2M and sort by size

j@ubuntu2004:~/dir1$ seq 10 | xargs -n1 -I '{}' truncate -s '{}'m file'{}'
j@ubuntu2004:~/dir1$ ls -lrth
total 0
-rw-rw-r-- 1 j j 3.0M Jan 14 08:56 file3
-rw-rw-r-- 1 j j 2.0M Jan 14 08:56 file2
-rw-rw-r-- 1 j j 1.0M Jan 14 08:56 file1
-rw-rw-r-- 1 j j 6.0M Jan 14 08:56 file6
-rw-rw-r-- 1 j j 5.0M Jan 14 08:56 file5
-rw-rw-r-- 1 j j 4.0M Jan 14 08:56 file4
-rw-rw-r-- 1 j j 8.0M Jan 14 08:56 file8
-rw-rw-r-- 1 j j 7.0M Jan 14 08:56 file7
-rw-rw-r-- 1 j j 9.0M Jan 14 08:56 file9
-rw-rw-r-- 1 j j  10M Jan 14 08:56 file10
j@ubuntu2004:~/dir1$ find . -size +2M  -printf "%p \t%s bytes\n"  | sort -k2n
./file3 	3145728 bytes
./file4 	4194304 bytes
./file5 	5242880 bytes
./file6 	6291456 bytes
./file7 	7340032 bytes
./file8 	8388608 bytes
./file9 	9437184 bytes
./file10 	10485760 bytes

Example 10: find files which were modified with 5 minutes

j@ubuntu2004:~/dir1$ pwd
/home/j/dir1
j@ubuntu2004:~/dir1$ echo "Test" >> file8
j@ubuntu2004:~/dir1$ find . -mmin -5
./file8
j@ubuntu2004:~/dir1$
       +n     for greater than n,
       -n     for less than n,
       n      for exactly n.
       -amin n
              File was last accessed n minutes ago.
       -atime n
              File  was  last  accessed n*24 hours ago.  When find figures out how many 24-hour periods ago the file was
              last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed  at
              least two days ago.
       -cmin n
              File's status was last changed n minutes ago.
       -ctime n
              File's status was last changed n*24 hours ago.  See the comments for -atime to understand how rounding af‐
              fects the interpretation of file status change times.
       -mmin n
              File's data was last modified n minutes ago.

       -mtime n
              File's  data was last modified n*24 hours ago.  See the comments for -atime to understand how rounding af‐
              fects the interpretation of file modification times.

Example 11: find files modify time between 10 minutes before and with 15 minutes

j@ubuntu2004:~$ find . -mmin -15  -mmin +10
./.local/share/gnome-shell
./.local/share/gnome-shell/application_state
./.bash_history
j@ubuntu2004:~$

Example 12 : Find files with specifying -maxdepth

j@ubuntu2004:~$ tree tmpdir
tmpdir
├── dir1
│   ├── file1
│   └── level2
│       ├── aaa
│       └── level3
└── dir2
    └── file2

4 directories, 3 files
j@ubuntu2004:~$ find tmpdir -maxdepth 1
tmpdir
tmpdir/dir1
tmpdir/dir2
j@ubuntu2004:~$ find tmpdir -maxdepth 2
tmpdir
tmpdir/dir1
tmpdir/dir1/file1
tmpdir/dir1/level2
tmpdir/dir2
tmpdir/dir2/file2
j@ubuntu2004:~$ find tmpdir -maxdepth 3
tmpdir
tmpdir/dir1
tmpdir/dir1/file1
tmpdir/dir1/level2
tmpdir/dir1/level2/aaa
tmpdir/dir1/level2/level3
tmpdir/dir2
tmpdir/dir2/file2

Example 13 : -exec to execute a command

Below command run file command on every file in or below the current directory

$find . -type f -exec file '{}' \;

Even you can run multiple -exec

$find . -type f -exec file '{}' \; -exec ls -l '{}' \;

Or run multiple commands within one -exec

find . -type d -exec sh -c "echo -n {}; echo -n ' x '; echo {}" \;