Linux find command examples
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 {}" \;