Linux Find Command Examples
The find command in Linux is a powerful utility for searching for files and directories within a directory hierarchy. It allows for complex search criteria, making it an indispensable tool for system administrators and developers. This page provides a comprehensive collection of practical examples to help you master the find command.
Finding Files and Directories
Learn how to locate files and directories based on their type, name, and other attributes.
# To find files following symlinks (otherwise the symlinks are not followed):
find -L . -type f
# To find files by case-insensitive extension (ex: .jpg, .JPG, .jpG):
find . -iname "*.jpg"
# To find directories:
find . -type d
# To find files:
find . -type f
Searching by Permissions and Ownership
Discover how to find files based on their octal permissions, setuid bit, and ownership.
# To find files by octal permission:
find . -type f -perm 777
# To find files with setuid bit set:
find . -xdev \( -perm -4000 \) -type f -print0 | xargs -0 ls -l
# To find symlinks owned by a user and list file information:
find . -type l -user <username-or-userid> -ls
Managing Files Based on Time and Size
Utilize find to locate files modified, accessed, or created within specific timeframes, or based on their size.
# To find files newer than 1 day old and copy elsewhere (remove -p flag in xargs to not be asked):
find . -type f -ctime -1 -print0 | xargs -0 -p cp -t <dir>
# or:
find . -type f -ctime -1 -print0 | xargs -0 -p -J % cp % <dir>
# To find files with size bigger than 5 Mebibyte and sort them by size:
find . -size +5M -type f -print0 | xargs -0 ls -Ssh | sort -z
# To find files bigger than 2 Megabyte and list them:
find . -type f -size +200000000c -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
# To find files modified more than 7 days ago and list file information:
find . -type f -mtime +7d -ls
# To find all files changed in last 2 days:
find . -type f -ctime -48h
find . -type f -ctime -2
# Or created in last 2 days:
find . -type f -Btime -2
# Or accessed in last 2 days:
find . -type f -atime -2
# To find files that are newer than a file:
find <path> -newer <target-file>
Performing Actions on Found Files
Learn how to execute commands on files found by find, such as deleting, copying, or dumping contents.
# To find files with extension '.txt' and remove them:
find ./path/ -name '*.txt' -delete
# To find files with tilde as postfix and remove them:
find ./path/ -name '*~' -delete
# To find files with extension '.txt' and dump their contents:
find ./path/ -name '*.txt' -exec cat '{}' \;
# To find files with extension '.txt' and look for a string into them:
find ./path/ -name '*.txt' | xargs grep 'string'
# To find and run multiple shell commands (without multiple execs):
# See: https://stackoverflow.com/questions/5119946/find-exec-with-multiple-commands
find . -type f -exec sh -c "echo '{}'; cat '{}';" \;
# To find all files in the current directory and modify their permissions:
find . -type f -exec chmod 644 {} \;
# To find and rename (imperfect) all files and dirs that have a comma in the
# name (dry-run):
find . -name '*,*' | while read f; do echo mv "$f" "${f//,/}"; done
Advanced Find Command Usage
Explore more advanced techniques, including finding hard links, empty directories, and excluding specific directories.
# To search for and delete empty directories:
find . -type d -empty -exec rmdir {} \;
# To search for directories named build at a max depth of 2 directories:
find . -maxdepth 2 -name build -type d
# To search all files who are not in .git directory:
find . ! -iwholename '*.git*' -type f
# To find all files that have the same node (hard link) as MY_FILE_HERE:
find . -type f -samefile MY_FILE_HERE 2>/dev/null
# To find all broken links. Note -L returns a file unless it is a broken link:
find -L /usr/ports/packages -type l