Busca Básica
Executando find
find . # list all files recursively find /var/log # search from specific path find . -name "*.txt" # find by name find / -name "config" 2>/dev/null # suppress permission errors find dir1 dir2 -name "*.py" # search multiple directories
Visão Geral da Sintaxe
find [path...] [tests] [actions]Forma geral — caminhos, testes, depois ações
pathDiretório inicial (padrão: diretório atual)
testCondição para filtrar arquivos (-name, -type, etc.)
actionO que fazer com as correspondências (-print, -exec, etc.)
Default action-print se nenhuma ação for especificada
Padrões de Nome
Correspondência de Nome
find . -name "*.log" # case-sensitive glob find . -iname "readme*" # case-insensitive glob find . -name "*.py" -o -name "*.js" # OR: Python or JS files find . -path "*/src/*.ts" # match against full path find . -regex '.*\.\(py\|js\)' # POSIX regex on full path
Testes de Nome
-name patternBasename corresponde a glob shell (case-sensitive)
-iname patternBasename corresponde a glob (case-insensitive)
-path patternCaminho completo corresponde a glob shell
-ipath patternCaminho completo corresponde a glob (case-insensitive)
-regex patternCaminho completo corresponde a expressão regular
-iregex patternCaminho completo corresponde a regex (case-insensitive)
Filtros de Tipo
Filtrar por Tipo
find . -type f # regular files only find . -type d # directories only find . -type l # symbolic links find . -type f -name "*.sh" # combine type + name
Tipos de Arquivo
-type fArquivo regular
-type dDiretório
-type lLink simbólico
-type bDispositivo de bloco
-type cDispositivo de caractere
-type pPipe nomeado (FIFO)
-type sSocket
-emptyArquivo ou diretório vazio
Tamanho e Tempo
Exemplos de Tamanho e Tempo
find . -size +100M # larger than 100 MB find . -size -1k # smaller than 1 KB find . -mtime -7 # modified in last 7 days find . -mmin -30 # modified in last 30 minutes find . -newer reference.txt # newer than reference file
Testes de Tamanho e Tempo
-size +/-NcTamanho em bytes (c), kilobytes (k), megabytes (M), gigabytes (G)
-mtime +/-NModificado há N*24 horas (+mais antigo, -mais recente)
-atime +/-NAcessado há N*24 horas
-ctime +/-NStatus alterado há N*24 horas
-mmin +/-NModificado há N minutos
-newer fileModificado mais recentemente que o arquivo
-newermt dateModificado após string de data (GNU)
Permissões
Exemplos de Permissão
find . -perm 644 # exact permissions: rw-r--r-- find . -perm -u+x # user has execute bit set find . -perm /o+w # others have write (any match) find . -user root # owned by root find . -group www-data -type f # owned by group
Testes de Permissão
-perm modeCorrespondência exata de permissão
-perm -modeTodos os bits especificados estão definidos
-perm /modeAlgum bit especificado está definido
-user namePertence ao usuário (nome ou UID)
-group namePertence ao grupo (nome ou GID)
-nouserNenhum usuário correspondente em /etc/passwd
-nogroupNenhum grupo correspondente em /etc/group
Ações
Exemplos de Ação
find . -name "*.log" -print # print paths (default) find . -name "*.tmp" -delete # delete matching files find . -type f -ls # detailed listing find . -name "*.txt" -print0 # null-delimited output find . -type f -printf "%p %s\n" # custom format (GNU)
Referência de Ações
-printImprimir caminho (delimitado por nova linha)
-print0Imprimir caminho (delimitado por null, seguro para xargs)
-lsImprimir detalhes do arquivo (como ls -dils)
-deleteExcluir arquivos correspondentes (implica -depth)
-printf formatFormato de saída personalizado (GNU): %p caminho, %s tamanho, %t hora
-fprint fileEscrever caminhos em arquivo
-quitSair após primeira correspondência
Combinando Testes
Operadores Lógicos
find . -name "*.py" -type f # implicit AND find . -name "*.py" -a -size +10k # explicit AND find . -name "*.py" -o -name "*.js" # OR find . ! -name "*.log" # NOT find . \( -name "*.py" -o -name "*.js" \) -type f
Referência de Operadores
expr1 expr2 / expr1 -a expr2AND — ambos devem ser verdadeiros (padrão)
expr1 -o expr2OR — um deve ser verdadeiro
! expr / -not exprNOT — negar a expressão
\( expr \)Agrupar expressões (escapar parênteses no shell)
Evaluation orderDa esquerda para direita; -a tem precedência sobre -o
Exec e Delete
Exemplos de Exec
find . -name "*.sh" -exec chmod +x {} \; find . -name "*.log" -exec rm {} + find . -type f -exec grep -l "TODO" {} + find . -name "*.bak" -ok rm {} \; # prompt before each find . -name "*.tmp" -print0 | xargs -0 rm
Referência de Exec
-exec cmd {} \;Executar cmd uma vez por arquivo ({} = caminho)
-exec cmd {} +Executar cmd com múltiplos arquivos de uma vez (mais rápido)
-ok cmd {} \;Como -exec mas solicita confirmação
-execdir cmd {} \;Executar cmd a partir do diretório do arquivo
xargs -0Combinar com -print0 para processamento seguro em lote
-deleteExcluir arquivos; processar os mais profundos primeiro
Profundidade e Poda
Exemplos de Profundidade e Poda
find . -maxdepth 1 -type f # current dir only find . -mindepth 2 -name "*.py" # skip top-level find . -name ".git" -prune -o -print # skip .git dirs find . -depth -name "*.tmp" -delete # process children first
Opções de Profundidade
-maxdepth NDescer no máximo N níveis (0 = apenas caminho inicial)
-mindepth NNão aplicar testes em níveis menores que N
-depthProcessar conteúdo do diretório antes do próprio diretório
-pruneNão descer no diretório correspondente
-mount / -xdevNão cruzar fronteiras de sistema de arquivos
-follow / -LSeguir links simbólicos
Padrões Comuns
One-Liners
find . -name "*.pyc" -delete # clean Python bytecode find . -type f -size 0 -delete # remove empty files find . -mtime +30 -name "*.log" -delete # purge old logs find . -type f -name "*.md" | wc -l # count Markdown files find . -type d -empty -delete # remove empty dirs
Receitas
Find largest filesfind . -type f -printf '%s %p\n' | sort -rn | head
Find duplicates by namefind . -type f | awk -F/ '{print $NF}' | sort | uniq -d
Rename extensionfind . -name '*.txt' -exec rename 's/.txt/.md/' {} +
Find broken symlinksfind . -xtype l
Archive recent filesfind . -mtime -7 -print0 | tar czf recent.tar.gz --null -T -
Search code filesfind . -name '*.py' -exec grep -l 'pattern' {} +