find flags & options
-name
Find files matching a name pattern (case-sensitive).
find . -name "*.js"
find /var/log -name "*.log"
-iname
Like -name but case-insensitive.
find . -iname "readme*"
-type
Filter by file type: f (file), d (directory), l (symlink).
find . -type f -name "*.md"
find . -type d -name "node_modules"
-mtime
Find files modified N days ago. +N means more than N days, -N means less.
find . -mtime -7
find /tmp -mtime +30
-size
Find files by size. + for larger, - for smaller. Suffixes: c (bytes), k, M, G.
find . -size +100M
find . -size -1k
-exec
Run a command on each matched file. {} is replaced with the filename.
find . -name "*.tmp" -exec rm {} \;
find . -name "*.js" -exec grep -l "TODO" {} \;
-delete
Delete matched files. Always put this last to avoid deleting everything.
find /tmp -name "*.tmp" -mtime +7 -delete
-maxdepth
Limit how deep into subdirectories to search.
find . -maxdepth 1 -type f
find . -maxdepth 2 -name "*.json"
-mindepth
Skip the first N levels of directories.
find . -mindepth 2 -name "*.py"
-perm
Find files with specific permissions.
find . -perm 755
find . -perm -u+x -type f
-user
Find files owned by a specific user.
find /home -user www-data
-empty
Find empty files or directories.
find . -type f -empty
find . -type d -empty -delete
-not, !
Negate a test.
find . -type f -not -name "*.log"