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"