Skip to main content

Usando o comando Linux e Unix

Linux/Mac Terminal Tutorial: How To Use The find Command (Junho 2026)

Linux/Mac Terminal Tutorial: How To Use The find Command (Junho 2026)
Anonim

O comando Linux e Unix encontrar executa uma pesquisa por arquivos em uma hierarquia de diretórios.

Sintaxe para encontrar comando:

find caminho … expressão

Descrição

Esta página de manual documenta a versão GNU do encontrar . O comando encontrar pesquisa a árvore de diretórios com raiz em cada nome de arquivo, avaliando a expressão determinada da esquerda para a direita, de acordo com as regras de precedência (consulte a seção sobre Operadores abaixo), até que o resultado seja conhecido; em outras palavras, o lado esquerdo é falso para e operações, verdade para ou , em que ponto encontrar passa para o próximo nome de arquivo.

O primeiro argumento que começa com:

  • -
  • ( ou),
  • !

é considerado o começo da expressão; qualquer argumento antes dele são caminhos para procurar, e quaisquer argumentos depois dele são o resto da expressão. Se nenhum caminho for fornecido, o diretório atual será usado. Se nenhuma expressão é dada, a expressão -impressão é usado.

o encontrar o comando sai com status 0 se todos os arquivos forem processados ​​com êxito, maior que 0 se ocorrerem erros.

Expressões

A expressão é composta de opções (que afetam a operação geral em vez do processamento de um arquivo específico e sempre retornam true), testes (que retornam um valor verdadeiro ou falso) e ações (que têm efeitos colaterais e retornam um valor verdadeiro ou falso). valor falso), todos separados por operadores. A expressão -e é assumido onde o operador é omitido. Se a expressão não contiver nenhuma outra ação -ameixa seca , então -impressão é executado em todos os arquivos para os quais a expressão é verdadeira.

Opções

Todas as opções sempre retornam true. Eles sempre entram em vigor, em vez de serem processados ​​somente quando seu lugar na expressão é atingido. Portanto, para maior clareza, é melhor colocá-los no início da expressão.

-daystart Medir os tempos (por -amin, -atime, -cmin, -ctime, -mmin, e -mtime ) a partir do início de hoje e não a partir de 24 horas atrás.
-profundidade Processe o conteúdo de cada diretório antes do próprio diretório.
-Segue Desreferenciar links simbólicos. Implica -noleaf .
-Socorro ou --Socorro Imprima um resumo do uso da linha de comando de encontrar e sair.
-profundidade máxima número Descida no maior número de níveis (um número inteiro não negativo) de diretórios abaixo dos argumentos da linha de comando. A expressão -maxdepth 0 significa aplicar apenas os testes e ações aos argumentos da linha de comando.
-mindepth number Não aplique nenhum teste ou ação em níveis menores que o número (um inteiro não negativo). A expressão -mindepth 1 significa processar todos os arquivos, exceto os argumentos da linha de comando.
-montagem Não desça diretórios em outros sistemas de arquivos. Um nome alternativo para -xdev , para compatibilidade com algumas outras versões de encontrar .
-noleaf Não otimize assumindo que os diretórios contenham menos 2 subdiretórios do que sua contagem de hard link. *
-versão ou --versão Imprima o encontrar número da versão e sair.
-xdev Não desça diretórios em outros sistemas de arquivos.

* Essa opção é necessária ao procurar sistemas de arquivos que não seguem a convenção de link de diretório Unix, como sistemas de arquivos em CD-ROM ou MS-DOS ou pontos de montagem de volume do AFS. Cada diretório em um sistema de arquivos Unix normal possui pelo menos 2 hard links: seu nome e seu. (período) de entrada. Além disso, seus subdiretórios (se houver) possuem cada um. entrada vinculada a esse diretório.

Quando encontrar está examinando um diretório, depois de ter registrado dois subdiretórios a menos que a contagem de links do diretório, ele sabe que o resto das entradas no diretório não são diretórios ( folha arquivos na árvore de diretórios). Se apenas os nomes dos arquivos precisarem ser examinados, não há necessidade de indicá-los; Isso dá um aumento significativo na velocidade de pesquisa.

Testes

Argumentos numéricos podem ser especificados como:

+ n Para maior que n.
-n Por menos de n.
n Exatamente para n.
-am n Arquivo foi acessado pela última vez n minutos atrás.
-anewer arquivo O arquivo foi acessado pela última vez mais recentemente do que Arquivo foi modificado. -anewer é afetado por -seguir apenas se -follow vem antes -anão na linha de comando.
-atime n Arquivo foi acessado pela última vez n * 24 horas atrás.
-cmin n O status do arquivo foi alterado pela última vez n minutos atrás.
-cnewer arquivo O status do arquivo foi alterado pela última vez mais recentemente do que o arquivo foi modificado.- cnewer é afetado por -Segue somente se -Segue vem antes -cnewer na linha de comando.
-ctime n O status do arquivo foi alterado pela última vez n * 24 horas atrás.
-esvaziar O arquivo está vazio e é um arquivo regular ou um diretório.
-falso Sempre falsa.
-fstype tipo O arquivo está em um sistema de arquivos do tipo especificado. Os tipos de sistema de arquivos válidos variam entre diferentes versões do Unix; uma lista incompleta de tipos de sistema de arquivos que são aceitos em alguma versão do Unix ou outra é: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Você pode usar -printf com a diretiva% F para ver os tipos de seus sistemas de arquivos.
-gid n O ID do grupo numérico do arquivo é n .
-group gname O arquivo pertence ao grupo gname (ID do grupo numérico permitido).
-ilname padrão Como -lname, mas a correspondência é insensível a maiúsculas e minúsculas.
-inome padrão Gostar -nome , mas a correspondência é insensível a maiúsculas e minúsculas. Por exemplo, os padrões para * e F ?? coincidir com os nomes dos arquivos Foo , FOO , foo , fOo etc.
-inum n O arquivo tem um número de inode n .
- caminho padrão Gostar -caminho , mas a correspondência é insensível a maiúsculas e minúsculas.
-iregex padrão Como -regex, mas a correspondência é insensível a maiúsculas e minúsculas.
-links n O arquivo tem n links.
-name padrão Arquivo é um link simbólico cujo conteúdo corresponde ao padrão do shell. Os metacaracteres não tratam / ou . especialmente.
-mmin n Os dados do arquivo foram modificados pela última vez n minutos atrás.
-mtime n Os dados do arquivo foram modificados pela última vez n * 24 horas atrás.
-nome padrão Base do nome do arquivo (o caminho com os diretórios principais removidos) corresponde ao padrão do shell. Os metacaracteres (*, ?e ) não correspondem a . no início do nome base. Para ignorar um diretório e os arquivos sob ele, use -ameixa seca ; veja um exemplo na descrição de -caminho .
-newer arquivo Arquivo foi modificado mais recentemente do que Arquivo . A expressão - mais é afetado por -Segue somente se -Segue vem antes - mais na linha de comando.
nouser Nenhum usuário corresponde ao ID do usuário numérico do arquivo.
-nogrupo Nenhum grupo corresponde ao ID do grupo numérico do arquivo.
caminho padrão Nome do arquivo corresponde ao padrão shell padronizar . Os metacaracteres não tratam / ou . especialmente; então, por exemplo,encontrar . -caminho './sr*sc irá imprimir uma entrada para um diretório chamado ./src/misc (se houver). Para ignorar uma árvore de diretórios inteira, use -ameixa seca em vez de verificar todos os arquivos na árvore. Por exemplo, para pular o diretório src / emacs e todos os arquivos e diretórios sob ele, e imprimir os nomes dos outros arquivos encontrados, faça algo assim:encontrar . -caminho './src/emacs' -prune -o -print
-perm modo Os bits de permissão do arquivo são exatamente modo (octal ou simbólico). Os modos simbólicos usam o modo 0 como um ponto de partida.
-modo -perm Todos os bits de permissão modo estão definidos para o arquivo.
modo -perm + Qualquer um dos bits de permissão modo estão definidos para o arquivo.
-regex padrão O nome do arquivo corresponde à expressão regular padronizar . Isso é uma correspondência em todo o caminho, não em uma pesquisa. Por exemplo, para corresponder a um arquivo chamado ./fubar3, você pode usar a expressão regular .*Barra. ou * b. * 3, mas não b. * r3.
-size n bckw Usos de arquivos n unidades de espaço. As unidades são blocos de 512 bytes por padrão ou se b segue n , bytes se c segue n , kilobytes se k segue n ou palavras de 2 bytes se w segue n . O tamanho não conta blocos indiretos, mas ele conta blocos em arquivos esparsos que não são realmente alocados.
-verdade Sempre verdade.
tipo c O arquivo é do tipo c :
b Bloquear (buffer) especial
c Personagem (sem buffer) especial
d Diretório
p Tubo nomeado (FIFO)
f Arquivo regular
eu Link simbólico
s Soquete
D porta (Solaris)
-uid n O ID do usuário numérico do arquivo é n .
n usado Arquivo foi acessado pela última vez n dias após o seu estado ter sido alterado pela última vez.
-user uname O arquivo é de propriedade do usuário uname (ID do usuário numérico permitido).
-xtype c O mesmo que -tipo a menos que o arquivo seja um link simbólico. Para links simbólicos: se -Segue não foi dado, verdadeiro se o arquivo é um link para um arquivo do tipo c ; E se -Segue foi dado, verdadeiro se c é l. Em outras palavras, para links simbólicos, -tipo verifica o tipo do arquivo que -tipo não verifica.

Ações

-exec comando ;

Executar comando ; true se o status 0 for retornado. Todos os argumentos a seguir paraencontrar são considerados argumentos para o comando até que um argumento consistindo de ';' é encontrado. A string '{}' é substituída pelo nome do arquivo atual sendo processado em todos os lugares em que ocorre nos argumentos do comando, não apenas nos argumentos em que está sozinho, como em algumas versões doencontrar. Ambas as construções podem precisar ser escapadas (com um ` ') ou citadas para protegê-las da expansão pelo shell. O comando é executado no diretório inicial.

-fls Arquivo

Verdade; como -ls, mas escreva para Arquivo como -fprint.

-f impressão Arquivo

Verdade; imprimir o nome completo do arquivo em arquivo Arquivo . E se Arquivo não existe quandoencontrar é executado, é criado; se existir, será truncado. Os nomes dos arquivos `` / dev / stdout '' e `` / dev / stderr '' são tratados especialmente; eles se referem à saída padrão e à saída de erro padrão, respectivamente.

-fprint0 Arquivo

Verdade; como -print0 mas escreva para Arquivo como -fprint.

-fprintf Arquivo formato

Verdade; como -printf mas escreva para Arquivo como -fprint.

-Está bem comando ;

Como -exec, mas pergunte ao usuário primeiro (na entrada padrão); se a resposta não começar com `y 'ou` Y', não execute o comando e retorne false.

-impressão

Verdade; imprima o nome completo do arquivo na saída padrão, seguido por uma nova linha.

-print0

Verdade; imprime o nome completo do arquivo na saída padrão, seguido por um caractere nulo.Isso permite que nomes de arquivos que contenham novas linhas sejam interpretados corretamente por programas que processamencontrar saída.

-printf formato

Verdade; impressão formato na saída padrão, interpretando as diretivas ` 'escapes e`%'. Larguras de campo e precisões podem ser especificadas como com a função `printf 'C. Ao contrário de -print, -printf não adiciona uma nova linha no final da string. As fugas e diretivas são:

uma

Alarme.

b

Backspace.

c

Pare de imprimir deste formato imediatamente e limpe a saída.

f

Feed de formulário.

n

Nova linha.

r

Retorno de carro.

t

Guia horizontal.

v

Guia vertical.

\

Uma barra invertida literal (` ').

NNN

O caractere cujo código ASCII é NNN (octal).

Um caractere ` 'seguido por qualquer outro caractere é tratado como um caractere comum, então ambos são impressos.

%%

Um sinal de porcentagem literal.

%uma

Último horário de acesso do arquivo no formato retornado pela função C `ctime '.

%UMA k

Último horário de acesso do arquivo no formato especificado por k , que é um `@ 'ou uma diretiva para a função C` strftime'. Os valores possíveis para k estão listados abaixo; alguns deles podem não estar disponíveis em todos os sistemas, devido a diferenças no 'strftime' entre os sistemas.

@

segundos desde 1º de janeiro de 1970, 00:00 GMT.

Campos de tempo:

H

hora (00..23)

Eu

hora (01.12)

k

hora (0..23)

eu

hora (1.12)

M

minuto (00,59)

p

AM ou PM do local

r

tempo, 12 horas (hh: mm: ss AP M)

S

segundo (00..61)

T

hora, 24 horas (hh: mm: ss)

X

representação de horário do local (H: M: S)

Z

fuso horário (por exemplo, EDT) ou nada se nenhum fuso horário for determinável

Campos de data:

uma

nome do dia da semana abreviado do local (Sun..Sat)

UMA

nome completo do dia da semana do local, duração variável (domingo … sábado)

b

nome abreviado do mês do local (jan.de)

B

nome completo do mês do local, comprimento variável (janeiro de dezembro)

c

data e hora do local (Sábado, 4 de novembro, 12:02:33 EST, 1989)

d

dia do mês (01.31)

D

data (mm / dd / aa)

h

o mesmo que b

j

dia do ano (001,366)

m

mês (01..12)

você

número da semana do ano com domingo como primeiro dia da semana (00..53)

W

dia da semana (0..6)

W

número de semana do ano com segunda-feira como primeiro dia da semana (00..53)

x

representação da data do local (mm / dd / aa)

y

últimos dois dígitos do ano (00..99)

Y

ano (1970 …)

% b

Tamanho do arquivo em blocos de 512 bytes (arredondados para cima).

% c

Última hora de mudança de status do arquivo no formato retornado pela função C `ctime '.

% C k

Última hora de alteração do status do arquivo no formato especificado por k , que é o mesmo que para% A.

% d

Profundidade do arquivo na árvore de diretórios; 0 significa que o arquivo é um argumento de linha de comando.

% f

Nome do arquivo com todos os diretórios principais removidos (somente o último elemento).

% F

Tipo do sistema de arquivos em que o arquivo está ativo; esse valor pode ser usado para -fstype.

% g

Nome do grupo do arquivo ou ID do grupo numérico se o grupo não tiver nome.

% G

ID do grupo numérico do arquivo.

% h

Diretórios principais do nome do arquivo (todos, exceto o último elemento).

% H

Argumento de linha de comando sob qual arquivo foi encontrado.

%Eu

Número do inode do arquivo (em decimal).

% k

Tamanho do arquivo em blocos de 1K (arredondados para cima).

%eu

Objeto do link simbólico (string vazia se o arquivo não for um link simbólico).

% m

Bits de permissão do arquivo (em octal).

% n

Número de links para o arquivo.

% p

Nome do arquivo.

% P

Nome do arquivo com o nome do argumento da linha de comando sob o qual foi encontrado removido.

% s

Tamanho do arquivo em bytes.

% t

Última hora da modificação do arquivo no formato retornado pela função C `ctime '.

% T k

Última hora da modificação do arquivo no formato especificado por k , que é o mesmo que para% A.

%você

Nome de usuário do arquivo ou ID de usuário numérico, se o usuário não tiver nome.

%VOCÊ

ID do usuário numérico do arquivo.

Um caractere `% 'seguido por qualquer outro caractere é descartado (mas o outro caractere é impresso).

-ameixa seca

Se -depth não é dado, true; não desça o diretório atual.Se -depth é dado, false; sem efeito.

-ls

Verdade; lista o arquivo atual no formato `ls -dils 'na saída padrão. As contagens de bloco são de blocos de 1K, a menos que a variável de ambiente POSIXLY_CORRECT esteja definida, nesse caso, blocos de 512 bytes são usados.

Operadores

Listado em ordem decrescente de precedência:

( expr )

Forçar precedência.

! expr

Verdade se expr é falso.

-não expr

Igual a ! expr .

expr1 expr2

E (implícito); expr2 não é avaliado se expr1 é falso.

expr1 -uma expr2

Igual a expr1 expr2 .

expr1 -e expr2

Igual a expr1 expr2 .

expr1 -o expr2

Ou; expr2 não é avaliado se expr1 é verdade.

expr1 -ou expr2

Igual a expr1 -o expr2 .

expr1 , expr2

Lista; ambos expr1 e expr2 são sempre avaliados. O valor de expr1 é descartado; o valor da lista é o valor de expr2 .

Exemplos

encontrar / home -user joe

Encontre todos os arquivos sob o diretório / home de propriedade do usuário joe.

encontrar / usr -name * stat

Encontre todos os arquivos sob o diretório / usr terminando em ".stat".

encontrar / var / spool -mtime +60

Encontre todos os arquivos sob o diretório / var / spool que foi modificado há mais de 60 dias.

find / tmp -name core -tipo f -print | xargs / bin / rm -f

Encontrar arquivos nomeadostestemunho dentro ou abaixo do diretório/ tmp e excluí-los.Observe que isso funcionará incorretamente se houver nomes de arquivos contendo novas linhas, aspas simples ou duplas ou espaços.

encontrar / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Encontrar arquivos nomeadostestemunho dentro ou abaixo do diretório/ tmp e excluí-los, processando nomes de arquivos de forma que os nomes de arquivos ou diretórios que contenham aspas simples ou duplas, espaços ou novas linhas sejam corretamente manipulados. o-nome teste vem antes do-tipo teste, a fim de evitar ter que ligarstat (2) em todos os arquivos.

encontrar . -tipo f -exec arquivo '{}' ;

Executa o `arquivo 'em todos os arquivos dentro ou abaixo do diretório atual. Observe que as chaves são colocadas entre aspas simples para protegê-las da interpretação como pontuação do script de shell. O ponto-e-vírgula é protegido da mesma forma pelo uso de uma barra invertida, embora ';' poderia ter sido usado nesse caso também.

encontrar / (-perm -4000 -fprintf /root/suid.txt '% # m% u% p n' ), (-size + 100M -fprintf /root/big.txt '% -10s% p n' )

Atravessar o sistema de arquivos apenas uma vez, listando os arquivos e diretórios setuid em/root/suid.txt e grandes arquivos em/root/big.txt.

encontrar $ HOME -mtime 0

Procure por arquivos em seu diretório inicial que foram modificados nas últimas 24 horas. Este comando funciona desta forma porque o tempo desde que cada arquivo foi modificado pela última vez é dividido por 24 horas e qualquer resto é descartado. Isso significa que para corresponder-mtime

0, um arquivo terá que ter uma modificação no passado, que é menos de 24 horas atrás.

encontrar . -perm 664

Procure por arquivos que tenham permissão de leitura e gravação para seu proprietário e grupo, mas que outros usuários possam ler, mas não gravar. Arquivos que atendem a esses critérios, mas possuem outros bits de permissão configurados (por exemplo, se alguém pode executar o arquivo) não serão correspondidos.

encontrar . -perm -664

Procure arquivos que tenham permissão de leitura e gravação para seu proprietário e grupo e que outros usuários possam ler, independentemente da presença de quaisquer bits de permissão extras (por exemplo, o bit executável). Isto irá corresponder a um arquivo que tenha o modo 0777, por exemplo.

encontrar . -perm / 222

Procure arquivos que podem ser gravados por alguém (seu dono, ou seu grupo, ou qualquer outra pessoa).

encontrar . -perm / 220 encontrar . -perm / u + w, g + w encontrar . -perm / u = w, g = w

Todos esses três comandos fazem a mesma coisa, mas o primeiro usa a representação octal do modo de arquivo e os outros dois usam a forma simbólica. Todos esses comandos pesquisam arquivos que podem ser gravados pelo proprietário ou pelo grupo. Os arquivos não precisam ser graváveis ​​pelo proprietário e pelo grupo a serem correspondidos; qualquer um fará.

encontrar . -perm -220 encontrar . -perm -g + w, u + w

Ambos os comandos fazem a mesma coisa; procure arquivos que podem ser gravados pelo proprietário e pelo grupo.

encontrar . -perm -444 -perm / 222! -perm / 111 encontrar . -perm -a + r -perm / a + w! -perm / a + x

Estes dois comandos, ambos, procuram por arquivos legíveis para todos (-perm -444 ou -perm -a + r), têm pelo menos um bit de gravação definido (-perm / 222 ou -perm / a + w) mas não são executáveis para qualquer um (! -perm / 111 e! -perm / a + x respectivamente)

Importante: Use o homem comando ( % homem ) para ver como um comando é usado em seu computador particular.