find - pesquisa por arquivos em uma hierarquia de
diretórios
find [-H] [-L] [-P] [-D
opçõesdepuração] [-Onível]
[ponto-de-partida...] [expressão]
Esta página de manual documenta a versão GNU do
find. O GNU find pesquisa a árvore de diretórios
enraizada em cada ponto de partida, avaliando a expressão dada da
esquerda para a direita, de acordo com as regras de precedência
(consulte a seção OPERADORES), até que o resultado seja
conhecido (o lado esquerdo é falso para operações
e, verdadeiro para ou), nesse ponto find passa para o
próximo nome de arquivo. Se nenhum ponto de partida for especificado,
`.' será assumido.
Se você estiver usando find em um ambiente em que a
segurança é importante (por exemplo, se você estiver
usando-o para pesquisar diretórios graváveis por outros
usuários), leia o capítulo "Security Considerations"
da documentação do findutils, que é chamado Finding
Files e vem com o findutils. Esse documento também inclui muito
mais detalhes e discussão do que esta página de manual,
portanto, você pode encontrar uma fonte de informação
mais útil.
As opções -H, -L e -P controlam
o tratamento de links simbólicos. Os argumentos da linha de comando a
seguir são considerados nomes de arquivos ou diretórios a
serem examinados, até o primeiro argumento que começa com
"-" ou o argumento "(" ou "!". Esse argumento
e os argumentos a seguir são usados para ser a expressão que
descreve o que deve ser pesquisado. Se nenhum caminho for fornecido, o
diretório atual será usado. Se nenhuma expressão for
fornecida, a expressão -print será usada (mas
você provavelmente deve considerar usar -print0).
Esta página de manual fala sobre
"opções" na lista de expressões. Essas
opções controlam o comportamento do find, mas
são especificadas imediatamente após o último nome do
caminho. As cinco opções "reais" -H,
-L, -P, -D e -O devem aparecer antes do nome do
primeiro caminho, se houver. Teoricamente, um traço duplo --
também pode ser usado para sinalizar que os argumentos restantes
não são opções, mas Isso não realmente
funciona por causa da forma que o find determina o fim dos seguintes
argumentos de caminho: ele faz isso lendo até um argumento de
expressão aparecer (que também inicia com um "-").
Agora, se um argumento de caminho iniciaria com um "-",
find o trataria como argumento de expressão. Assim, para
garantir que todos os pontos iniciais sejam considerados como tal e,
especialmente, para evitar que os padrões de curinga expandidos pelo
shell de chamada não sejam tratados erroneamente como argumentos de
expressão, geralmente é mais seguro prefixar curingas ou nomes
de caminho duvidosos com "./" ou para usar nomes de caminho
absolutos começando com "/". Alternativamente, é
geralmente seguro, embora não portátil, usar a
opção GNU -files0-from para passar pontos de partida
arbitrários para find.
- -P
- Nunca segue links simbólicos. Esse é o comportamento
padrão. Quando find examina ou imprime
informações sobre um arquivo, e o arquivo é um link
simbólico, as informações utilizadas devem ser
obtidas das propriedades do próprio link simbólico.
- -L
- Segue os links simbólicos. Quando find examina ou imprime
informações sobre arquivos, as informações
usadas devem ser obtidas das propriedades do arquivo para o qual o link
aponta, não do próprio link (a menos que seja um link
simbólico quebrado ou find não possa para examinar o
arquivo para o qual o link aponta). O uso dessa opção
implica em -noleaf. Se você em seguida usar a
opção -P, -noleaf ainda estará em
vigor. Se -L estiver em vigor e find descobrir um link
simbólico para um subdiretório durante sua pesquisa, o
subdiretório apontado pelo link simbólico será
pesquisado.
- Quando a opção -L estiver em vigor, o predicado
-type sempre corresponderá ao tipo de arquivo ao qual um
link simbólico aponta e não ao próprio link (a menos
que o link simbólico esteja quebrado). Ações que
podem causar quebra de links simbólicos enquanto find
está em execução (por exemplo, -delete) podem
gerar um comportamento confuso. O uso de -L faz com que os
predicados -lname e -ilname sempre retornem false.
- -H
- Não segue os links simbólicos, exceto durante o
processamento dos argumentos da linha de comandos. Quando find
examina ou imprime informações sobre arquivos, as
informações usadas devem ser obtidas das propriedades do
próprio link simbólico. A única exceção
a esse comportamento é quando um arquivo especificado na linha de
comando é um link simbólico e o link pode ser resolvido.
Para essa situação, as informações usadas
são obtidas de qualquer ponto para o qual o link aponta (ou seja, o
link é seguido). As informações sobre o
próprio link são usadas como fallback se o arquivo apontado
pelo link simbólico não puder ser examinado. Se -H
estiver em vigor e um dos caminhos especificados na linha de comando for
um link simbólico para um diretório, o conteúdo desse
diretório será examinado (embora, é claro,
-maxdepth 0 evite isso).
Se mais de uma opção de -H, -L e
-P for especificada, cada uma substituirá as outras; a
última que aparece na linha de comando entra em vigor. Como é
o padrão, a opção -P deve ser considerada em
vigor, a menos que -H ou -L sejam especificados.
O GNU find frequentemente estatísticas arquivos
durante o processamento da própria linha de comando, antes de
qualquer pesquisa ter começado. Essas opções
também afetam como esses argumentos são processados.
Especificamente, existem vários testes que comparam os arquivos
listados na linha de comando com um arquivo que estamos considerando no
momento. Em cada caso, o arquivo especificado na linha de comando
será examinado e algumas de suas propriedades serão salvas. Se
o arquivo nomeado é de fato um link simbólico e a
opção -P está em vigor (ou se -H nem
-L foram especificados), as informações usadas para a
comparação serão obtidas das propriedades do link
simbólico. Caso contrário, ele será retirado das
propriedades do arquivo para o qual o link aponta. Se find não
puder seguir o link (por exemplo, porque possui privilégios
insuficientes ou o link aponta para um arquivo inexistente), as propriedades
do próprio link serão usadas.
Quando as opções -H ou -L estiverem em
vigor, quaisquer links simbólicos listados como argumento de
-newer serão desreferenciados e o carimbo de data e hora
será retirado do arquivo para o qual o link simbólico aponta.
A mesma consideração se aplica a -newerXY,
-anewer e -cnewer.
A opção -follow tem um efeito semelhante a
-L, embora tenha efeito no ponto em que aparece (ou seja, se
-L não for usado, mas -follow for, quaisquer links
simbólicos que apareçam depois de -follow na linha de
comando serão desreferenciados, e aqueles antes dele não
serão).
- -D opções-de-depuração
- Imprime informações de diagnóstico; isso pode ser
útil para diagnosticar problemas com os motivos pelos quais
find não está fazendo o que você deseja. A
lista de opções de depuração deve ser separada
por vírgula. A compatibilidade das opções de
depuração não é garantida entre os
lançamentos do findutils. Para obter uma lista completa das
opções de depuração válidas, consulte a
saída de find -D help. Opções de
depuração válidas incluem
- exec
- Mostra informações de diagnóstico relacionadas a
-exec, -execdir, -ok e -okdir
- opt
- Imprime informações de diagnóstico relacionadas
à otimização da árvore de expressões;
veja a opção -O.
- rates
- Imprime um resumo indicando com que frequência cada predicado teve
êxito ou falhou.
- search
- Navega na árvore de diretórios verbalmente.
- stat
- As mensagens de impressão como arquivos são examinadas com
as chamadas do sistema stat e lstat. O programa find
tenta minimizar essas chamadas.
- tree
- Mostra a árvore de expressão em sua forma original e
otimizada.
- all
- Habilita todas as outras opções de depuração
(exceto help).
- help
- Explica as opções de depuração.
- -Onível
- Habilita a otimização de consultas. O programa find
reordena os testes para acelerar a execução, preservando o
efeito geral; isto é, predicados com efeitos colaterais não
são reordenados em relação um ao outro. As
otimizações executadas em cada nível de
otimização são as seguintes.
- 0
- Equivalente ao nível de otimização 1.
- 1
- Este é o nível de otimização padrão e
corresponde ao comportamento tradicional. As expressões são
reordenadas para que os testes baseados apenas nos nomes dos arquivos (por
exemplo, -name e -regex) sejam executados primeiro.
- 2
- Todos os testes -type ou -xtype são executados
após quaisquer testes baseados apenas nos nomes dos arquivos, mas
antes de qualquer teste que exija informações do
nó-i. Em muitas versões modernas do Unix, os tipos de
arquivo são retornados por readdir() e, portanto, esses
predicados são mais rápidos de avaliar do que os predicados
que precisam declarar o arquivo primeiro. Se você usar o predicado
com -fstype FOO e especificar um sistema de arquivos
tipo FOO que não seja conhecido (ou seja, presente em
`/etc/mtab') no momento em que find for iniciado, esse predicado
é equivalente a -false.
- 3
- Nesse nível de otimização, o otimizador de consultas
completo baseado em custos está ativado. A ordem dos testes
é modificada para que os testes baratos (ou seja, rápidos)
sejam executados primeiro e os mais caros sejam realizados posteriormente,
se necessário. Dentro de cada faixa de custo, os predicados
são avaliados mais cedo ou mais tarde, de acordo com a
probabilidade de êxito ou não. Para -o, os predicados
com probabilidade de êxito são avaliados anteriormente e
para -a, os predicados com probabilidade de falha são
avaliados anteriormente.
- O otimizador baseado em custos tem uma ideia fixa da probabilidade de um
determinado teste ser bem-sucedido. Em alguns casos, a probabilidade leva
em consideração a natureza específica do teste (por
exemplo, presume-se que -type f seja mais provável
que seja bem-sucedido que -type c) O otimizador baseado em
custos está sendo avaliado no momento. Se, na verdade, não
melhorar o desempenho de find, ele será removido novamente.
Por outro lado, otimizações que provam ser
confiáveis, robustas e eficazes podem ser ativadas em níveis
mais baixos de otimização ao longo do tempo. No entanto, o
comportamento padrão (ou seja, nível de
otimização 1) não será alterado na
série de versões 4.3.x. O conjunto de testes do findutils
executa todos os testes em find em cada nível de
otimização e garante que o resultado seja o mesmo.
A reordenação de operações
executadas pelo otimizador baseado em custo pode resultar em
mudança de comportamento visível ao usuário. Por
exemplo, os predicados -readable e -empty são
sensíveis à reordenação. Se eles forem
executados na ordem -empty -readable, uma mensagem de erro
será emitida para diretórios ilegíveis. Se eles
forem executados na ordem -readable -empty, nenhuma mensagem de
erro será emitida. Esta é a razão pela qual tal
reordenação de operação não é
executada no nível de otimização padrão.
A parte da linha de comando após a lista de pontos de
partida é a expressão. Esse é um tipo de
especificação de consulta que descreve como correspondemos aos
arquivos e o que fazemos com os arquivos correspondentes. Uma
expressão é composta por uma sequência de coisas:
- Testes
- Os testes retornam um valor verdadeiro ou falso, geralmente com base em
alguma propriedade de um arquivo que estamos considerando. O teste
-empty, por exemplo, é verdadeiro apenas quando o arquivo
atual está vazio.
- Ações
- As ações têm efeitos colaterais (como imprimir algo
na saída padrão) e retornam verdadeiro ou falso, geralmente
com base no êxito ou não delas. A ação
-print, por exemplo, imprime o nome do arquivo atual na
saída padrão.
- Opções
globais
- As opções globais afetam a operação de testes
e ações especificados em qualquer parte da linha de
comandos. As opções globais sempre retornam verdadeiras. A
opção -depth, por exemplo, faz com que find
percorra o sistema de arquivos em uma ordem profunda.
- Opções
posicionais
- As opções posicionais afetam apenas testes ou
ações que os seguem. As opções posicionais
sempre retornam verdadeiras. A opção -regextype, por
exemplo, é posicional, especificando o dialeto da expressão
regular para expressões regulares que ocorrem posteriormente na
linha de comando.
- Operadores
- Os operadores juntam os outros itens da expressão. Eles incluem,
por exemplo, -o (significando OU lógico) e -a
(significando E lógico). Onde um operador está ausente,
-a é presumido.
A ação -print é realizada em todos os
arquivos para os quais toda a expressão é verdadeira, a menos
que ela contenha uma ação além de -prune ou
-quit. As ações que inibem o -print
padrão são -delete, -exec, -execdir,
-ok, -okdir, -fls, -fprint, -fprintf,
-ls, -print e -printf.
A ação -delete também atua como uma
opção (uma vez que implica -depth).
OPÇÕES POSICIONAIS
As opções posicionais sempre retornam verdadeiras.
Eles afetam apenas os testes que ocorrem posteriormente na linha de
comando.
- -daystart
- Mede tempos (para -amin, -atime, -cmin,
-ctime, -mmin e -mtime) desde o início de hoje
e não 24 horas atrás. Esta opção afeta apenas
os testes que aparecem mais tarde na linha de comando.
- -follow
- Descontinuada; use a opção -L. Desreferencia links
simbólicos. Implica -noleaf. A opção
-follow afeta apenas os testes que aparecem depois na linha de
comando. A menos que a opção -H ou -L tenha
sido especificada, a posição da opção
-follow altera o comportamento do predicado -newer; todos os
arquivos listados como argumento de -newer serão
desreferenciados se forem links simbólicos. A mesma
consideração se aplica a -newerXY, -anewer e
-cnewer. Da mesma forma, o predicado -type sempre
corresponderá ao tipo de arquivo ao qual um link simbólico
aponta, em vez do próprio link. Usar -follow faz com que os
predicados -lname e -ilname sempre retornem falso.
- -regextype
tipo
- Altera a sintaxe da expressão regular entendida pelos testes
-regex e -iregex que ocorrem posteriormente na linha de
comando. Para ver quais tipos de expressão regular são
conhecidos, use -regextype help. A
documentação do Texinfo (consulte VEJA
TAMBÉM) explica o significado e as diferenças entre
os vários tipos de expressão regular. Se você
não usar esta opção, find se comportará como
se o tipo de expressão regular emacs tivesse sido
especificado.
- -warn, -nowarn
- Ativa ou desativa as mensagens de aviso. Esses avisos se aplicam apenas ao
uso da linha de comando, não a quaisquer condições
que find ao encontrar diretórios. O comportamento
padrão corresponde a -warn se a entrada padrão for um
tty e a -nowarn caso contrário. Se uma mensagem de aviso
relacionada ao uso da linha de comandos for produzida, o status de
saída de find não será afetado. Se a
variável de ambiente POSIXLY_CORRECT estiver configurada e
-warn também for usado, não será especificado
quais avisos, se houver algum, estarão ativos.
OPÇÕES GLOBAIS
As opções globais sempre retornam verdadeiras. As
opções globais entram em vigor mesmo para testes que ocorrem
anteriormente na linha de comando. Para evitar confusão, as
opções globais devem ser especificadas na linha de comando
após a lista de pontos de partida, imediatamente antes do primeiro
teste, opção posicional ou ação. Se você
especificar uma opção global em algum outro lugar, find
emitirá uma mensagem de aviso explicando que isso pode ser
confuso.
As opções globais ocorrem após a lista de
pontos de início e, portanto, não são o mesmo tipo de
opção que -L, por exemplo.
- -d
- Um sinônimo para -depth, para compatibilidade com FreeBSD, NetBSD,
MacOS X e OpenBSD.
- -depth
- Processa o conteúdo de cada diretório antes do
próprio diretório. A ação de -delete
também implica em -depth.
- -files0-from
arquivo
- Leia os pontos de partida de arquivo em vez de obtê-los na
linha de comando. Em contraste com as limitações conhecidas
de passar pontos de partida por meio de argumentos na linha de comando, a
saber, a limitação da quantidade de nomes de arquivo e a
ambiguidade inerente de nomes de arquivo colidindo com nomes de
opção, usar esta opção permite passar com
segurança um número arbitrário de pontos de partida
para find.
Usar esta opção e passar pontos de partida na
linha de comando é mutuamente exclusivo e, portanto, não
é permitido ao mesmo tempo.
O argumento arquivo é obrigatório.
Pode-se usar -files0-from - para ler a lista de pontos de
partida do fluxo da entrada padrão e, por exemplo, de um
pipe. Neste caso, as ações -ok e -okdir
não são permitidas, porque elas obviamente interfeririam
na leitura de entrada padrão para obter uma
confirmação do usuário.
Os pontos de partida em arquivo devem ser separados por
caracteres ASCII NULO. Dois caracteres NULO consecutivos, ou seja, um
ponto de partida com um nome de arquivo de comprimento Zero não
é permitido e levará a um diagnóstico de erro
seguido por um código de saída diferente de Zero mais
tarde.
No caso de arquivo fornecido estar vazio, find
não processa nenhum ponto de partida e, portanto, sairá
imediatamente após analisar os argumentos do programa. Isso
é diferente da invocação padrão, onde
find assume o diretório atual como ponto de partida se
nenhum argumento de caminho for passado.
O processamento dos pontos de partida é, de outra
forma, como de costume, por exemplo, find recursivamente em
subdiretórios, a menos que seja impedido de outra forma. Para
processar apenas os pontos de partida, pode-se passar adicionalmente
-maxdepth 0.
Outras notas: se um arquivo for listado mais de uma vez no
arquivo de entrada, não é especificado se ele é
visitado mais de uma vez. Se o arquivo for mutado durante a
operação de find, o resultado também
não é especificado. Finalmente, a posição de
busca dentro do arquivo nomeado no momento em que find
sai, seja com -quit ou de qualquer outra forma, também
não é especificada. Por "não
especificado" aqui entende-se que ele pode ou não funcionar
ou fazer qualquer coisa específica, e que o comportamento pode
mudar de plataforma para plataforma, ou de versão
findutils para versão.
- -help, --help
- Imprime um resumo do uso da linha de comando de find e sai.
- -ignore_readdir_race
- Normalmente, find emite uma mensagem de erro quando falha ao
declarar um arquivo. Se você der essa opção e um
arquivo for excluído entre o momento em que find lê o
nome do arquivo no diretório e o momento em que ele tenta
estatizá-lo, nenhuma mensagem de erro será emitida. Isso
também se aplica a arquivos ou diretórios cujos nomes
são dados na linha de comando. Essa opção entra em
vigor no momento em que a linha de comando é lida, o que significa
que você não pode procurar uma parte do sistema de arquivos
com essa opção ativada e outra parte com esta
opção desativada (se precisar fazer isso, será
necessário emitir dois comandos find em vez disso, um com a
opção e outro sem ela).
Além disso, find com a opção
-ignore_readdir_race ignorará os erros da
ação -delete caso o arquivo tenha desaparecido
desde que o diretório pai foi lido: ele não emitirá
um diagnóstico de erro e o retorno o código da
ação -delete será verdadeiro.
- -maxdepth
níveis
- Desce no máximo níveis (um número inteiro
não negativo) de diretórios abaixo dos pontos de partida.
-maxdepth 0 significa aplicar apenas os testes e
ações aos próprios pontos de partida.
- -mindepth
níveis
- Não aplica nenhum teste ou ação em níveis
inferiores a níveis (um número inteiro não
negativo). -mindepth 1 significa processar todos os
arquivos, exceto os pontos de partida.
- -mount
- Não desce diretórios em outros sistemas de arquivos. Um nome
alternativo para -xdev, para compatibilidade com outras
versões do find.
- -noignore_readdir_race
- Desativa o efeito de -ignore_readdir_race.
- -noleaf
- Não otimiza presumindo que os diretórios contenham 2
subdiretórios a menos do que a contagem de links físicos.
Essa opção é necessária ao pesquisar sistemas
de arquivos que não seguem a convenção de link de
diretório Unix, como sistemas de arquivos 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 links físicos: seu nome
e sua entrada ".". Além disso, seus subdiretórios
(se houver) possuem uma entrada ".." vinculada a esse
diretório. Quando find está examinando um
diretório, depois de declarar 2 subdiretórios a menos que a
contagem de links do diretório, ele sabe que o restante das
entradas no diretório são não-diretórios
(arquivos "folhas" na árvore de diretórios). Se
apenas os nomes dos arquivos precisam ser examinados, não há
necessidade de especificá-los; isso proporciona um aumento
significativo na velocidade da pesquisa.
- -version,
--version
- Imprime o número de versão do find e sai.
- -xdev
- Não desce diretórios em outros sistemas de arquivos.
Alguns testes, por exemplo, -newerXY e -samefile,
permitem a comparação entre o arquivo que está sendo
examinado no momento e algum arquivo de referência especificado na
linha de comando. Quando esses testes são usados, a
interpretação do arquivo de referência é
determinada pelas opções -H, -L e -P e
qualquer -follow anterior, mas o arquivo de referência
é examinado apenas uma vez, no momento em que a linha de comando
é analisada. Se o arquivo de referência não puder ser
examinado (por exemplo, a chamada do sistema stat(2) falha para
isso), uma mensagem de erro será emitida e find sairá
com um status diferente de zero.
Um argumento numérico n pode ser especificado para
testes (como -amin, -mtime, -gid, -inum,
-links, -size, -uid e -used) como
- +n
- para maior que n,
- -n
- para menor que n,
- n
- para exatamente n.
Testes suportados:
- -amin n
- O arquivo foi acessado pela última vez há menos, mais ou
exatamente n minutos atrás.
- -anewer
referência
- O horário do último acesso ao arquivo atual é mais
recente que o da última modificação de dados do
arquivo referência. Se referência for um link
simbólico e a opção -H ou -L estiver em
vigor, sempre será usado o horário da última
modificação de dados do arquivo para o qual ele aponta.
- -atime n
- O arquivo foi acessado pela última vez há menos, mais ou
exatamente n*24 horas atrás. Quando find descobre
quantos períodos de 24 horas atrás o arquivo foi acessado
pela última vez, qualquer parte fracionária será
ignorada; portanto, para corresponder a -atime +1, um
arquivo deve ter sido acessado pelo menos dois dias atrás.
- -cmin n
- O status do arquivo foi alterado pela última vez há menos,
mais ou exatamente n minutos atrás.
- -cnewer
referência
- O horário do última alteração do status do
arquivo atual é mais recente que o da última
modificação de dados do arquivo referência. Se
referência for um link simbólico e a
opção -H ou -L estiver em vigor, sempre
será usado o horário da última
modificação de dados do arquivo para o qual ele aponta.
- -ctime n
- O status do arquivo foi alterado pela última vez há menos,
mais ou exatamente n*24 horas atrás. Consulte os
comentários para -atime para entender como o arredondamento
afeta a interpretação dos tempos de alteração
do status do arquivo.
- -empty
- O arquivo está vazio e é um arquivo comum ou um
diretório.
- -executable
- Corresponde a arquivos executáveis e diretórios
pesquisáveis (no sentido da resolução do nome do
arquivo) pelo usuário atual. Isso leva em
consideração as listas de controle de acesso e outros
artefatos de permissões que o teste -perm ignora. Este teste
utiliza a chamada de sistema access(2) e, portanto, pode ser
enganado por servidores NFS que fazem o mapeamento de UID (ou esmagamento
da raiz), pois muitos sistemas implementam access(2) no kernel do
cliente e, portanto, não pode fazer uso das
informações de mapeamento do UID mantidas no servidor. Como
esse teste é baseado apenas no resultado da chamada do sistema
access(2), não há garantia de que um arquivo para o
qual esse teste seja bem-sucedido possa realmente ser executado.
- -false
- Sempre falso.
- -fstype
tipo
- O arquivo está em um sistema de arquivos do tipo tipo. Os
tipos de sistema de arquivos válidos variam entre diferentes
versões do Unix; uma lista incompleta de tipos de sistemas de
arquivos que são aceitos em alguma versão do Unix ou em
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 numérico do grupo do arquivo é menor, maior ou
exatamente n.
- -group
nome-grupo
- O arquivo pertence ao grupo nome-grupo (ID numérico do grupo
permitido).
- -ilname
padrão
- Como -lname, mas a correspondência não diferencia
maiúsculas de minúsculas. Se a opção -L
ou -follow estiver em vigor, esse teste retornará false, a
menos que o link simbólico esteja quebrado.
- -iname
padrão
- Como -name, mas a correspondência não diferencia
maiúsculas de minúsculas. Por exemplo, os padrões
"fo*" e "F??" correspondem aos nomes de arquivo
"Foo" , "FOO", "foo", "fOo" etc. O
padrão "*foo*" também corresponderá a um
arquivo chamado ".foobar".
- -inum n
- O arquivo possui o número de nó-i menor, maior ou exatamente
n. Normalmente, é mais fácil usar o teste
-samefile.
- -ipath
padrão
- Como -path, mas a correspondência não diferencia
maiúsculas de minúsculas.
- -iregex
padrão
- Como -regex, mas a correspondência não diferencia
maiúsculas de minúsculas.
- -iwholename
padrão
- Veja -ipath. Esta alternativa é menos portátil que
-ipath.
- -links n
- O arquivo possui n links físico.
- -lname
padrão
- O arquivo é um link simbólico cujo conteúdo
corresponde ao padrão de shell padrão. Os
metacaracteres não tratam "/" ou "." em
especial. Se a opção -L ou -follow estiver em
vigor, esse teste retornará false, a menos que o link
simbólico esteja quebrado.
- -mmin n
- Os dados do arquivo foram modificados pela última vez há
menos, mais ou exatamente n minutos atrás.
- -mtime n
- Os dados do arquivo foram modificados pela última vez há
menor, mais ou exatamente n*24 horas atrás. Consulte os
comentários para -atime para entender como o arredondamento
afeta a interpretação dos tempos de alteração
do status do arquivo.
- -name
padrão
- A base do nome do arquivo (o caminho com os diretórios principais
removidos) corresponde ao padrão de shell padrão.
Como os diretórios principais dos nomes de arquivo são
removidos, o padrão não deve incluir uma barra,
porque `-name a/b' nunca corresponderá a nada (e você
provavelmente deseja usar -path em vez disso). Uma
exceção a isso é quando se usa apenas uma barra como
padrão (`-name /'), porque essa é uma string
válida para corresponder ao diretório raiz "/"
(porque o nome base de "/" é "/"). Um aviso
é emitido se você tentar passar um padrão contendo
uma - mas não consistindo somente de uma - barra, a menos que a
variável de ambiente POSIXLY_CORRECT esteja definida ou a
opção -nowarn seja usada.
Para ignorar um diretório e os arquivos nele, use
-prune em vez de verificar todos os arquivos na árvore;
veja um exemplo na descrição dessa ação. As
chaves não são reconhecidas como especiais, apesar do fato
de que alguns shells, incluindo o Bash, conferem às chaves um
significado especial nos padrões de shell. A
correspondência do nome do arquivo é realizada com o uso
da função da biblioteca fnmatch(3). Não se
esqueça de colocar o padrão entre aspas para
protegê-lo da expansão pelo shell.
- -newer
referência
- O horário do última modificação dos dados do
arquivo atual é mais recente que o da última
modificação de dados do arquivo referência. Se
referência for um link simbólico e a
opção -H ou -L estiver em vigor, sempre
será usado o horário da última
modificação de dados do arquivo para o qual ele aponta.
- -newerXY
referência
- É bem-sucedido se o registro de data e hora X do arquivo que
está sendo considerado for mais novo que o registro de data e hora
Y do arquivo referência. As letras X e
Y podem ser qualquer uma das seguintes letras:
| a |
O tempo de acesso do arquivo referência |
| B |
A tempo de criação do arquivo
referência |
| c |
O tempo de alteração do status do nó-i de
referência |
| m |
A tempo de modificação do arquivo
referência |
| t |
referência é interpretado diretamente como um
tempo |
Algumas combinações são inválidas;
por exemplo, é inválido que X seja t.
Algumas combinações não são implementadas em
todos os sistemas; por exemplo, B não é suportado
em todos os sistemas. Se uma combinação inválida ou
não suportada de XY for especificada, ocorrerá um
erro fatal. As especificações de tempo são
interpretadas como para o argumento da opção -d do
GNU date. Se você tentar usar o tempo de
criação de um arquivo de referência e o tempo de
criação não puder ser determinado, uma mensagem de
erro fatal será exibida. Se você especificar um teste que
se refira ao tempo de criação dos arquivos que
estão sendo examinados, esse teste falhará nos arquivos em
que o tempo de criação seja desconhecido.
- -nogroup
- Nenhum grupo corresponde ao ID número de grupo do arquivo.
- -nouser
- Nenhum usuário corresponde ao ID número de usuário do
arquivo.
- -path
padrão
- O nome do arquivo corresponde ao padrão de shell
padrão. Os metacaracteres de não tratam "/"
ou "." de forma especial; então, por exemplo,
find . -path "./sr*sc"
vai exibir uma entrada para um diretório chamado ./src/misc
(se houver). Para ignorar uma árvore de diretórios inteira,
use -prune em vez de verificar todos os arquivos na árvore.
Observe que o teste de correspondência de padrões se aplica
a todo o nome do arquivo, iniciando em um dos pontos de início
nomeados na linha de comandos. Só faria sentido usar um nome de
caminho absoluto aqui se o ponto inicial relevante também for um
caminho absoluto. Isso significa que este comando nunca
corresponderá a nada:
find bar -path /foo/bar/meuarquivo -print
Find compara o argumento -path com a concatenação de um
nome de diretório e o nome base do arquivo que está sendo
examinado. Como a concatenação nunca termina com uma barra,
os argumentos -path que terminam em uma barra não
correspondem a nada (exceto talvez um ponto inicial especificado na linha
de comando). O predicado -path também é suportado
pelo find de HP-UX e faz parte do padrão POSIX 2008.
- -perm modo
- Os bits de permissão do arquivo são exatamente modo
(octal ou simbólico). Como é necessária uma
correspondência exata, se você deseja usar este
formulário para modos simbólicos, pode ser necessário
especificar uma sequência de modos bastante complexa. Por exemplo,
"-perm g=w" corresponderá apenas aos arquivos que possuem
o modo 0020 (ou seja, aqueles para os quais a permissão de
gravação de grupo é a única permissão
definida). É mais provável que você queira usar as
formas "/" ou "-", por exemplo "-perm -g=w",
que corresponde a qualquer arquivo com permissão de
gravação em grupo. Veja a seção
EXEMPLOS para alguns exemplos ilustrativos.
- -perm
-modo
- Todos os bits de permissão modo são definidos para o
arquivo. Os modos simbólicos são aceitos nesta forma, e
geralmente é dessa maneira que você deseja usá-los.
Você deve especificar "u", "g" ou "o"
se usar um modo simbólico. Veja a seção
EXEMPLOS para alguns exemplos ilustrativos.
- -perm
/modo
- Qualquer um dos bits de permissão modo está definido
para o arquivo. Os modos simbólicos são aceitos neste
formulário. Você deve especificar "u",
"g" ou "o" se usar um modo simbólico. Veja a
seção EXEMPLOS para alguns exemplos ilustrativos. Se
nenhum bit de permissão em modo estiver definido, esse teste
corresponderá a qualquer arquivo (a ideia aqui é ser
consistente com o comportamento de -perm -000).
- -perm
+modo
- Isso não é mais suportado (e está descontinuado desde
2005). Use -perm /modo.
- -readable
- Corresponde a arquivos legíveis pelo usuário atual. Isso
leva em consideração as listas de controle de acesso e
outros artefatos de permissões que o teste -perm ignora.
Este teste utiliza a chamada de sistema access(2) e, portanto, pode
ser enganado pelos servidores NFS que fazem o mapeamento de UID (ou
"root-squashing"), pois muitos sistemas implementam
access(2) no kernel do cliente e, portanto, não pode usar as
informações de mapeamento do UID mantidas no servidor.
- -regex
padrão
- O nome do arquivo corresponde à expressão regular
padrão. Esta é uma correspondência em todo o
caminho, não uma pesquisa. Por exemplo, para corresponder a um
arquivo chamado ./fubar3, você pode usar a expressão
regular ".*bar." ou ".*b.*3", mas não
"f.*r3". As expressões regulares entendidas por
find são por padrão expressões regulares do
Emacs (exceto que "." corresponde a caracteres de nova linhas),
mas isso pode ser alterado com a opção -regextype.
- -samefile
nome
- O arquivo refere-se ao mesmo nó-i que nome. Quando -L
está em vigor, isso pode incluir links simbólicos.
- -size
n[cwbkMG]
- O arquivo usa menos, mais ou exatamente n unidades de
espaço, arredondando para cima. Os seguintes sufixos podem ser
usados:
- "b"
- para blocos de 512 bytes (este é o padrão se nenhum sufixo
for usado)
- "c"
- para bytes
- "w"
- para palavras com 2 bytes
- "k"
- para kibibytes (KiB, unidades de 1024 bytes)
- "M"
- para mebibytes (MiB, unidades de 1024 * 1024 = 1048576 bytes)
- "G"
- para gibibytes (GiB, unidades de of * 1024 * 1024 = 1073741824 bytes)
- O tamanho é simplesmente o membro st_size do struct stat preenchido
pela chamada do sistema lstat (ou stat), arredondado para cima, como
mostrado acima. Em outras palavras, é consistente com o resultado
obtido para ls -l. Lembre-se de que os especificadores de
formato "%k" e "%b" de -printf lidam com
arquivos esparsos de maneira diferente. O sufixo "b" sempre
indica blocos de 512 bytes e nunca blocos de 1024 bytes, o que é
diferente do comportamento de -ls.
- Os prefixos + e - significam maior que e menor que, como de costume; ou
seja, um tamanho exato de n unidades não corresponde. Tenha
em mente que o tamanho é arredondado para a próxima unidade.
Portanto, -size -1M não é equivalente a
-size -1048576c. O primeiro corresponde apenas a arquivos
vazios, o último corresponde a arquivos de 0 a 1.048.575
bytes.
- -true
- Sempre verdadeiro.
- -type c
- Arquivo é do tipo c:
- b
- especial de bloco (com buffer)
- c
- especial de caractere (sem buffer)
- d
- diretório
- p
- encadeamento com nome (FIFO)
- f
- arquivo regular
- l
- link simbólico; isso nunca é verdadeiro se a
opção -L ou a opção -follow
estiver em vigor, a menos que o link simbólico esteja quebrado. Se
você deseja procurar links simbólicos quando -L
estiver em vigor, use -xtype.
- s
- socket
- D
- door (Solaris)
- Para procurar mais de um tipo de uma vez, você pode fornecer a
lista combinada de letras do tipo separadas por uma vírgula
"," (extensão GNU).
- -uid n
- O ID numérico do usuário do arquivo é menor que,
maior que ou exatamente n.
- -used n
- O arquivo foi acessado pela última vez há menos, mais ou
exatamente n dias após a última
alteração do status.
- -user
nome-usuário
- O arquivo pertence ao usuário uname (ID numérico do
usuário permitido).
- -wholename
padrão
- Veja -path. Esta alternativa é menos portátil que
-path.
- -writable
- Corresponde a arquivos graváveis pelo usuário atual. Isso
leva em consideração as listas de controle de acesso e
outros artefatos de permissões que o teste -perm ignora.
Este teste utiliza a chamada de sistema access(2) e, portanto, pode
ser enganado pelos servidores NFS que fazem o mapeamento de UID (ou
"root-squashing"), pois muitos sistemas implementam
access(2) no kernel do cliente e, portanto, não pode usar as
informações de mapeamento do UID mantidas no servidor.
- -xtype c
- O mesmo que -type, a menos que o arquivo seja um link
simbólico. Para links simbólicos: se a opção
-H ou -P foi especificada, verdadeiro se o arquivo for um
link para um arquivo do tipo c; se a opção -L
tiver sido fornecida, verdadeiro se c for "l". Em outras
palavras, para links simbólicos, -xtype verifica o tipo de
arquivo que -type não verifica. Se um link simbólico
for quebrado (porque o objeto para o qual ele aponta não existe ou
o link aponta para si mesmo), então -xtype se
comportará da mesma forma que -type.
- -context
padrão
- (SELinux somente) O contexto de segurança do arquivo corresponde ao
glob padrão.
AÇÕES
- -delete
- Exclui arquivos ou diretórios; verdadeiro se a
remoção for bem-sucedida. Se a remoção falhar,
uma mensagem de erro será emitida e o status de saída do
find será diferente de zero (quando eventualmente sair).
Aviso: Não se esqueça de que find
avalia a linha de comando como uma expressão, portanto, colocar
-delete primeiro fará com que find tente excluir
tudo abaixo dos pontos iniciais especificados.
O uso da ação -delete na linha de comando
ativa automaticamente a opção -depth. Como por sua
vez -depth torna -prune ineficaz, a ação
-delete não pode ser combinada de forma útil com
-prune.
Frequentemente, o usuário pode querer testar uma linha
de comando find com -print antes de adicionar
-delete para a execução de remoção
real. Para evitar resultados surpreendentes, geralmente é melhor
lembrar de usar -depth explicitamente durante essas
execuções de teste anteriores.
A ação -delete vai falhar para remover um
diretório a menos que esteja vazia.
Junto com a opção -ignore_readdir_race,
find ignorará os erros da ação
-delete caso o arquivo tenha desaparecido desde que o
diretório pai foi lido: ele não emitirá um
diagnóstico de erro, não alterará o código
de saída para diferente de zero e o retorno o código da
ação -delete será verdadeiro.
- -exec comando ;
- Executa comando; verdadeiro se 0 status for retornado. Todos os
argumentos a seguir para find são considerados argumentos
para o comando até um argumento que consiste em ";"
é 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 de find. Ambas
as construções podem precisar ser escapadas (com um
"\") ou citadas para protegê-las da expansão pelo
shell. Consulte a seção EXEMPLOS para exemplos de uso
da opção -exec. O comando especificado é
executado uma vez para cada arquivo correspondente. O comando é
executado no diretório inicial. Existem problemas de
segurança inevitáveis em torno do uso da ação
-exec; você deve usar a opção -execdir.
- -exec comando {} +
- Essa variante da ação -exec executa o comando
especificado nos arquivos selecionados, mas a linha de comando é
construída anexando cada nome de arquivo selecionado no final; o
número total de invocações do comando será
muito menor que o número de arquivos correspondentes. A linha de
comando é construída da mesma maneira que xargs
constrói suas linhas de comando. Apenas uma instância de
"{}" é permitida dentro do comando e deve aparecer no
final, imediatamente antes do "+"; ele precisa ser escapado (com
um "\") ou entre aspas para protegê-lo da
interpretação pelo shell. O comando é executado no
diretório inicial. Se alguma chamada com a forma "+"
retornar um valor diferente de zero como status de saída,
find retornará um status de saída diferente de zero.
Se find encontrar um erro, às vezes pode causar uma
saída imediata, portanto, alguns comandos pendentes podem
não ser executados. Por este motivo,
-exec meu-comando ... {} + -quit
pode não resultar em meu-comando ser executado. Esta
variante de -exec sempre retorna verdadeiro.
- -execdir comando
;
- -execdir
comando {} +
- Como -exec, mas o comando especificado é executado no
subdiretório que contém o arquivo correspondente, que
normalmente não é o diretório no qual você
iniciou o find. Assim como com -exec, o {} deve ser citado se find
estiver sendo chamado de um shell. Esse é um método muito
mais seguro para chamar comandos, pois evita condições de
corrida durante a resolução dos caminhos para os arquivos
correspondentes. Assim como na ação -exec, o
formulário "+" de -execdir criará uma linha
de comando para processar mais de um arquivo correspondente, mas qualquer
chamada de comando listará apenas os arquivos existentes no
o mesmo subdiretório. Se você usar esta opção,
assegure-se de que sua variável de ambiente PATH não
faça referência a "."; caso contrário, um
invasor poderá executar qualquer comando que desejar, deixando um
arquivo com nome apropriado em um diretório no qual você
executará -execdir. O mesmo se aplica a ter entradas em
PATH vazias ou que não sejam nomes de diretório
absolutos. Se qualquer chamada com a forma "+" retornar um valor
diferente de zero como status de saída, find
retornará um status de saída diferente de zero. Se
find encontrar um erro, às vezes isso pode causar uma
saída imediata; portanto, alguns comandos pendentes podem
não ser executados. O resultado da ação depende se a
variante + ou ; está sendo usada;
-execdir comando {} + sempre
retorna verdadeiro, enquanto
-execdir comando {} ; retorna
verdadeiro somente se comando retornar 0.
- -fls arquivo
- Verdadeiro; como -ls, mas escreve para arquivo como
-fprint. O arquivo de saída é sempre criado, mesmo
que o predicado nunca seja correspondido. Consulte a seção
NOMES DE ARQUIVOS INCOMUNS para obter informações
sobre como os caracteres incomuns nos nomes de arquivos são
tratados.
- -fprint
arquivo
- Verdadeiro; imprime o nome completo do arquivo no arquivo arquivo.
Se arquivo não existe quando find for executado, ele
será criado; se existir, será truncado. Os nomes de arquivo
/dev/stdout e /dev/stderr são tratados de forma
especial; eles se referem à saída padrão e à
saída de erro padrão, respectivamente. O arquivo de
saída é sempre criado, mesmo que o predicado nunca seja
correspondido. Consulte a seção NOMES DE ARQUIVOS
INCOMUNS para obter informações sobre como os caracteres
incomuns nos nomes de arquivos são tratados.
- -fprint0
arquivo
- Verdadeiro; como -print0, mas escreva para arquivo como
-fprint. O arquivo de saída é sempre criado, mesmo
que o predicado nunca seja correspondido. Consulte a seção
NOMES DE ARQUIVOS INCOMUNS para obter informações
sobre como os caracteres incomuns nos nomes de arquivos são
tratados.
- -fprintf arquivo
formato
- Verdadeiro; como -printf, mas escreva para arquivo como
-fprint. O arquivo de saída é sempre criado, mesmo
que o predicado nunca seja correspondido. Consulte a seção
NOMES DE ARQUIVOS INCOMUNS para obter informações
sobre como os caracteres incomuns nos nomes de arquivos são
tratados.
- -ls
- Verdadeiro; lista o arquivo atual no formato ls -dils na
saída padrão. As contagens de blocos são de blocos de
1 KB, a menos que a variável de ambiente
POSIXLY_CORRECT esteja configurada; nesse caso, blocos de 512 bytes
são usados. Consulte a seção NOMES DE ARQUIVOS
INCOMUNS para obter informações sobre como os caracteres
incomuns nos nomes de arquivos são tratados.
- -ok comando ;
- Como -exec, mas pergunta ao usuário primeiro. Se o
usuário concordar, executa o comando. Caso contrário,
só retorna falso. Se o comando for executado, sua entrada
padrão será redirecionada de /dev/null. Esta
ação não pode ser especificada junto com a
opção -files0-from.
- A resposta ao prompt é comparada com um par de expressões
regulares para determinar se é uma resposta afirmativa ou negativa.
Essa expressão regular é obtida do sistema se a
variável de ambiente POSIXLY_CORRECT estiver configurada ou,
caso contrário, das traduções de mensagens de
find. Se o sistema não tiver uma definição
adequada, a própria definição de find
será usada. Nos dois casos, a interpretação da
própria expressão regular será afetada pelas
variáveis de ambiente LC_CTYPE (classes de caracteres) e
LC_COLLATE (classes de equivalência e intervalos de
caracteres).
- -okdir comando
;
- Como -execdir, mas pergunta ao usuário primeiro na mesma
forma que para -ok. Se o usuário não concordar,
só retorna falso. Se o comando for executado, sua entrada
padrão será redirecionada de /dev/null. Esta
ação não pode ser especificada junto com a
opção -files0-from.
- -print
- Verdadeiro; imprime o nome completo do arquivo na saída
padrão, seguido por uma nova linha. Se você estiver
canalizando a saída de find para outro programa e houver a
menor possibilidade de que os arquivos que você está
procurando possam conter uma nova linha, considere seriamente usar a
opção -print0 em vez de -print. Consulte a
seção NOMES DE ARQUIVOS INCOMUNS para obter
informações sobre como os caracteres incomuns nos nomes de
arquivos são tratados.
- -print0
- Verdadeiro; imprime o nome completo do arquivo na saída
padrão, seguido por um caractere nulo (em vez do caractere de nova
linha que -print usa). Isso permite que nomes de arquivos que
contenham novas linhas ou outros tipos de espaço em branco sejam
corretamente interpretados por programas que processam a saída do
find. Esta opção corresponde à
opção -0 de xargs.
- -printf
formato
- Verdadeiro; imprime formato na saída padrão,
interpretando os escapes "\" e a diretivas "%". As
larguras e precisões dos campos podem ser especificadas como na
função C printf(3). Observe que muitos dos campos
são impressos como %s em vez de %d, e isso pode significar que os
sinalizadores não funcionam conforme o esperado. Isso também
significa que o sinalizador "-" funciona (força os campos
a serem alinhados à esquerda). Diferentemente de -print,
-printf não adiciona uma nova linha no final da string. Os
escapes e as diretrizes são:
- \a
- Bipe de alarme.
- \b
- Backspace.
- \c
- Para de imprimir deste formato imediatamente e limpa a saída.
- \f
- Alimentação de formulário.
- \n
- Nova linha.
- \r
- Carriage return.
- \t
- Tabulação horizontal.
- \v
- Tabulação vertical.
- \0
- ASCII NULO
- \\
- A versão literal de uma barra invertida ("\").
- \NNN
- O caractere cujo código ASCII é NNN (octal).
Um caractere "\" seguido por qualquer outro caractere
é tratado como caractere comum, portanto, ambos são
impressos.
- %%
- Um sinal de porcentagem literal.
- %a
- Hora do último acesso do arquivo no formato retornado pela
função C ctime(3).
- %Ak
- Hora do último acesso do arquivo no formato especificado por
k, que é "@" ou uma diretiva para a
função C strftime(3). A seguir é mostrada uma
lista incompleta de valores possíveis para k. Por favor,
consulte a documentação de strftime(3) para a lista
completa. Alguns dos caracteres de especificação de
conversão podem não estar disponíveis em todos os
sistemas, devido a diferenças na implementação da
função de biblioteca strftime(3).
- @
- segundos desde 1º de jan, 1970, 00:00 GMT, com parte
fracionária.
Campos de tempo:
- H
- hora (00..23)
- I
- hora (01..12)
- k
- hora ( 0..23)
- l
- hora ( 1..12)
- M
- minuto (00..59)
- p
- AM ou PM da localidade
- r
- tempo no formato 12 horas (hh:mm:ss [AP]M)
- S
- Segundo (00.00 .. 61.00). Há uma parte fracionária.
- T
- tempo no formato 24 horas (hh:mm:ss.xxxxxxxxxx)
- +
- Data e hora, separadas por "+", por exemplo
"2004-04-28+22:22:05.0". Esta é uma extensão GNU.
O tempo é dado no fuso horário atual (que pode ser afetado
pela configuração da variável de ambiente TZ).
O campo segundos inclui uma parte fracionária.
- X
- representação do tempo da localidade (H:M:S). O campo
segundos inclui uma parte fracionária.
- Z
- fuso horário (por exemplo, EDT) ou nada se nenhum fuso
horário for determinável
Campos de data:
- a
- nome abreviado do dia da semana da localidade (dom..sáb)
- A
- nome completo do dia da semana da localidade (domingo..sábado)
- b
- nome abreviado do dia do mês da localidade (jan..dez)
- B
- nome completo do dia do mês da localidade (janeiro..dezembro)
- c
- data e hora do local (sáb 04 nov 10:02:33 1989). O formato é
o mesmo que para ctime(3) e, para preservar a compatibilidade com
esse formato, não há parte fracionária no campo
segundos.
- d
- dia do mês (01..31)
- D
- data (mm/dd/yy)
- F
- date (yyyy-mm-dd)
- h
- mesmo que b
- j
- dia do ano (001..366)
- m
- mês (01..12)
- U
- número da semana do ano com domingo como primeiro dia da semana
(00..53)
- w
- dia da semana (0..6)
- W
- número da semana do ano com segunda-feira como primeiro dia da
semana (00..53)
- x
- representação de data da localidade (dd/mm/yyyy)
- y
- últimos dois dígitos do ano (00..99)
- Y
- ano (1970...)
- %b
- A quantidade de espaço em disco usada para esse arquivo em blocos
de 512 bytes. Como o espaço em disco é alocado em
múltiplos do tamanho do bloco do sistema de arquivos, geralmente
é maior que %s/512, mas também pode ser menor se o arquivo
for um arquivo esparso.
- %Bk
- Hora da criação do arquivo, no formato especificado por
k, que é o mesmo que para %A. Esta diretiva produz uma
string vazia se o sistema operacional ou sistema de arquivos subjacente
não suportar horas de nascimento.
- %c
- Hora do último tempo de alteração do arquivo no
formato retornado pela função C ctime(3).
- %Ck
- Tempo da última alteração de 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 ponto de partida.
- %D
- O número do dispositivo no qual o arquivo existe (o campo st_dev da
estrutura stat), em decimal.
- %f
- Imprime o nome base; o nome do arquivo com quaisquer diretórios
principais removidos (apenas o último elemento). Para /, o
resultado é "/". Veja a seção
EXEMPLOS para um exemplo.
- %F
- Tipo do sistema de arquivos em que o arquivo está; esse valor pode
ser usado para -fstype.
- %g
- Nome do grupo do arquivo ou ID numérico do grupo, se o grupo
não tiver um nome.
- %G
- O ID numérico do grupo do arquivo.
- %h
- Dirname; os diretórios principais do nome do arquivo (todos, exceto
o último elemento). Se o nome do arquivo não contém
barras (já que está no diretório atual), o
especificador %h se expande para ".". Para arquivos que
são diretórios e contêm uma barra (incluindo
/), %h se expande para a string vazia. Veja a seção
EXEMPLOS para um exemplo.
- %H
- Ponto de partida em que arquivo foi encontrado.
- %i
- Número do nó-i do arquivo (em decimal).
- %k
- A quantidade de espaço em disco usada para esse arquivo em blocos
de 1 KB. Como o espaço em disco é alocado em
múltiplos do tamanho do bloco do sistema de arquivos, geralmente
é maior que %s/1024, mas também pode ser menor se o arquivo
for um arquivo esparso.
- %l
- 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). Esta opção
usa os números "tradicionais" usados pela maioria das
implementações do Unix, mas se a sua
implementação específica usa uma ordem incomum de
bits de permissões octais, você verá uma
diferença entre o valor real do modo do arquivo e a saída de
%m. Normalmente, você deseja ter um zero à esquerda nesse
número e, para fazer isso, use o sinalizador # (como em, por
exemplo, "%#m").
- %M
- Permissões do arquivo (em forma simbólica, como para
ls). Esta diretiva é suportada no findutils 4.2.5 e
posterior.
- %n
- Número de links físicos para o arquivo.
- %p
- Nome do arquivo.
- %P
- Nome do arquivo com o nome do ponto de partida sob o qual foi encontrado
removido.
- %s
- Tamanho do arquivo em bytes.
- %S
- Escassez de arquivo. Isso é calculado como
(TAMBLOCO*st_blocks/st_size). O valor exato que você obterá
para um arquivo comum de um determinado comprimento depende do sistema. No
entanto, arquivos normalmente esparsos terão valores menores que
1.0 e arquivos que usam blocos indiretos podem ter um valor maior que 1.0.
Em geral, o número de blocos usados por um arquivo depende do
sistema de arquivos. O valor usado para TAMBLOCO depende do sistema, mas
geralmente é de 512 bytes. Se o tamanho do arquivo for zero, o
valor impresso será indefinido. Em sistemas que não
têm suporte a st_blocks, a escassez de um arquivo é
presumida como 1.0.
- %t
- Hora da última modificação do arquivo no formato
retornado pela função C ctime(3).
- %Tk
- Tempo da última modificação do arquivo no formato
especificado por k, que é o mesmo que para %A.
- %u
- Nome do usuário do arquivo ou ID numérico do usuário,
se o usuário não tiver um nome.
- %U
- O ID numérico do usuário do arquivo.
- %y
- Tipo do arquivo (como em ls -l), U=tipo desconhecido (não
deveria ocorrer)
- %Y
- Tipo do arquivo (como %y), somado a seguir links simbólicos:
"L"=repetição, "N"=não existente,
"?" para qualquer outro erro ao determinar o tipo do alvo de um
link simbólico.
- %Z
- (apenas SELinux) contexto de segurança do arquivo.
- %{ %[ %(
- Reservado para uso futuro.
Um caractere "%" seguido por qualquer outro caractere
é descartado, mas o outro caractere é impresso (não
conte com isso, pois outros caracteres de formato podem ser introduzidos).
Um "%" no final do argumento de formato causa um comportamento
indefinido, pois não há caractere seguinte. Em algumas
localidades, ele pode ocultar as chaves da porta, enquanto em outros pode
remover a página final do romance que você está
lendo.
As diretivas %m e %d suportam os sinalizadores #, 0
e +, mas as outras diretivas não, mesmo que imprimam
números. As diretivas numéricas que não suportam esses
sinalizadores incluem G, U, b, D, k e
n. O sinalizador de formato "-" é suportado e muda o
alinhamento de um campo de justificado à direita (que é o
padrão) para justificado à esquerda.
Consulte a seção NOMES DE ARQUIVOS INCOMUNS
para obter informações sobre como os caracteres incomuns nos
nomes de arquivos são tratados.
- -prune
- Verdadeiro; se o arquivo for um diretório, não entra nele.
Se -depth for dado, então -prune tem nenhum efeito.
Porque -delete implica em -depth, você não
pode usar de forma útil -prune e -delete juntos. Por
exemplo, para pular o diretório src/emacs e todos os
arquivos e diretórios dentro dele, e imprimir os nomes dos outros
arquivos encontrados, faça algo como isso aqui:
find . -path ./src/emacs -prune -o -print
- -quit
- Sai imediatamente (com valor de retorno zero se nenhum erro tiver
ocorrido). Isso é diferente de -prune porque -prune
só se aplica ao conteúdo de diretórios removidos,
enquanto -quit simplesmente faz com que find pare
imediatamente. Nenhum processo filho será deixado em
execução. Quaisquer linhas de comando que foram criadas por
-exec ... + ou -execdir ... +
são invocadas antes de o programa ser encerrado. Depois que
-quit for executado, nenhum outro arquivo especificado na linha de
comando será processado. Por exemplo,
`find /tmp/foo /tmp/bar -print -quit`
imprimirá apenas `/tmp/foo`.
Um uso comum de -quit é parar de pesquisar o sistema de
arquivos assim que encontrarmos o que queremos. Por exemplo, se quisermos
encontrar apenas um único arquivo, podemos fazer o seguinte:
find / -name agulha -print -quit
Listados em ordem decrescente de precedência:
- ( expr )
- Força a precedência. Como os parênteses são
especiais para o shell, normalmente você precisará
colocá-los entre aspas. Muitos dos exemplos nesta página de
manual usam barras invertidas para este propósito:
"\(...\)" em vez de "(...)".
- ! expr
- Verdadeiro se expr for falso. Esse caractere geralmente
também precisará de proteção contra
interpretação pelo shell.
- -not expr
- Mesmo que ! expr, mas não compatível com POSIX.
- expr1 expr2
- Duas expressões em uma linha são consideradas unidas com um
-a implícito; expr2 não é avaliado se
expr1 for falso.
- expr1 -a
expr2
- Mesmo que expr1 expr2.
- expr1 -and
expr2
- Mesmo que expr1 expr2, mas não compatível com POSIX.
- expr1 -o
expr2
- Ou; expr2 não é avaliado se expr1 for falso.
- expr1 -or
expr2
- Mesmo que expr1 -o expr2, mas não
compatível com POSIX.
- expr1 ,
expr2
- Lista; ambos expr1 e expr2 são sempre avaliados. O
valor de expr1 é descartado; o valor da lista é o
valor de expr2. O operador vírgula pode ser útil para
pesquisar vários tipos diferentes de coisas, mas percorrer a
hierarquia do sistema de arquivos apenas uma vez. A ação
-fprintf pode ser usada para listar os vários itens
correspondentes em vários arquivos de saída diferentes.
Observe que -a quando especificado implicitamente (por
exemplo, por dois testes que aparecem sem um operador explícito entre
eles) ou explicitamente tem precedência mais alta do que -o.
Isso significa que find . -name arquivoa -o -name arquivob -print
nunca imprimirá um arquivoa.
Muitas das ações de find resultam na
impressão de dados que estão sob o controle de outros
usuários. Isso inclui nomes de arquivos, tamanhos, horários de
modificação e assim por diante. Os nomes dos arquivos
são um problema potencial, pois podem conter qualquer caractere,
exceto "\0" e "/". Caracteres incomuns em nomes de
arquivo podem causar coisas inesperadas e frequentemente indesejáveis
em seu terminal (por exemplo, alterar as configurações de suas
teclas de função em alguns terminais). Caracteres incomuns
são tratados de forma diferente por várias
ações, conforme descrito abaixo.
- -print0,
-fprint0
- Sempre imprime o nome do arquivo exato, inalterado, mesmo se a
saída for para um terminal.
- -ls, -fls
- Caracteres incomuns sempre têm escape. Os caracteres de
espaço em branco, barra invertida e aspas duplas são
impressos usando escape no estilo C (por exemplo, `\f', `\"'). Outros
caracteres incomuns são impressos usando escape octal. Outros
caracteres imprimíveis (para -ls e -fls esses
são os caracteres entre octal 041 e 0176) são impressos no
estado em que se encontram.
- -printf,
-fprintf
- Se a saída não for para um terminal, ela será
impressa no estado em que se encontra. Caso contrário, o resultado
depende de qual diretiva está em uso. As diretivas %D, %F, %g, %G,
%H, %Y e %y se expandem para valores que não estão sob
controle dos donos dos arquivos e, portanto, são impressos no
estado em que se encontram. As diretivas %a, %b, %c, %d, %i, %k, %m, %M,
%n, %s, %t, %u e %U têm valores que estão sob o controle dos
donos dos arquivos, mas que não podem ser usados para enviar dados
arbitrários para o terminal e, portanto, são impressos no
estado em que se encontram. As diretivas %f, %h, %l, %p e %P são
colocadas entre aspas. Esta forma de colocar entre aspas é
realizada da mesma maneira que para GNU ls. Este não
é o mesmo mecanismo de uso de aspas usado para -ls e
-fls. Se você for capaz de decidir qual formato usar para a
saída do find, então normalmente é melhor usar
`\0' como um terminador do que usar nova linha, já que os nomes de
arquivo podem conter espaços em branco e caracteres de nova linha.
A configuração da variável de ambiente
LC_CTYPE é usada para determinar quais caracteres precisam
ser colocado entre aspas.
- -print, -fprint
- A uso de aspas é tratado da mesma maneira que para -printf e
-fprintf . Se estiver usando find em um script ou em uma
situação em que os arquivos correspondentes possam ter nomes
arbitrários, você deve considerar o uso de -print0 em
vez de -print.
As ações -ok e -okdir imprimem o nome
do arquivo atual no estado em que se encontra. Isso pode mudar em uma
versão futura.
Para uma conformidade mais próxima do padrão POSIX,
você deve definir a variável de ambiente
POSIXLY_CORRECT. As seguintes opções são
especificadas no padrão POSIX (IEEE Std 1003.1-2008, 2016
Edition):
- -H
- Está opção é suportada.
- -L
- Está opção é suportada.
- -name
- Esta opção é suportada, mas a conformidade com POSIX
depende da conformidade com POSIX da função de biblioteca
fnmatch(3) do sistema. A partir de findutils-4.2.2, os
metacaracteres de shell ("*", "?" ou "[]",
por exemplo) correspondem a um "." inicial, porque a
interpretação 126 do IEEE PASC requer isso. Esta é
uma mudança em relação às versões
anteriores do findutils.
- -type
- Suportado. POSIX especifica "b", "c", "d",
"l", "p", "f" e "s". GNU find
também suporta "D", representando uma porta, onde o
sistema operacional os fornece. Além disso, GNU find permite que
vários tipos sejam especificados de uma vez em uma lista separada
por vírgulas.
- -ok
- Suportado. A interpretação da resposta é de acordo
com os padrões "yes" e "no" selecionados pela
configuração da variável de ambiente
LC_MESSAGES. Quando a variável de ambiente
POSIXLY_CORRECT é definida, esses padrões são
considerados a definição do sistema de uma resposta positiva
(yes) ou negativa (no). Consulte a documentação do sistema
para nl_langinfo(3), em particular YESEXPR e NOEXPR. Quando
POSIXLY_CORRECT não é definido, os padrões
são retirados do próprio catálogo de mensagens de
find.
- -newer
- Suportado. Se o arquivo especificado for um link simbólico, ele
sempre terá a desreferência. Esta é uma
mudança do comportamento anterior, que costumava tirar o tempo
relevante do link simbólico; veja a seção
HISTÓRICO abaixo.
- -perm
- Suportado. Se a variável de ambiente POSIXLY_CORRECT
não for definida, alguns argumentos de modo (por exemplo, +a+x) que
não são válidos em POSIX são suportados para
compatibilidade com versões anteriores.
- Outros
primários
- Os primários -atime, -ctime, -depth,
-exec, -group, -links, -mtime,
-nogroup, -nouser, -ok, -path, -print,
-prune, -size, -user e -xdev são todos
suportados.
O padrão POSIX especifica parênteses "(",
")", negação "!" e os operadores
lógicos E/OU -a e -o.
Todas as outras opções, predicados,
expressões e assim por diante são extensões além
do padrão POSIX. Muitas dessas extensões não são
exclusivas do GNU find, entretanto.
O padrão POSIX requer que o find detecte loops:
- O utilitário find deve detectar loops infinitos; ou seja,
inserir um diretório visitado anteriormente que é um
ancestral do último arquivo encontrado. Ao detectar um loop
infinito, o find deve escrever uma mensagem de diagnóstico
para o erro padrão e deve recuperar sua posição na
hierarquia ou terminar.
GNU find está em conformidade com esses requisitos.
A contagem de links de diretórios que contêm entradas que
são links físicos para um ancestral geralmente será
menor do que deveria ser. Isso pode significar que o GNU find às
vezes otimiza a visita a um subdiretório que é na verdade um
link para um ancestral. Como o find não entra em tal
subdiretório, é permitido evitar a emissão de uma
mensagem de diagnóstico. Embora esse comportamento possa ser um tanto
confuso, é improvável que alguém realmente dependa
desse comportamento. Se a otimização de folha foi desativada
com -noleaf, a entrada do diretório sempre será
examinada e a mensagem de diagnóstico será emitida onde for
apropriado. Links simbólicos não podem ser usados para criar
ciclos de sistema de arquivos como tal, mas se a opção
-L ou a opção -follow estiver em uso, uma
mensagem de diagnóstico é emitida quando find encontra
um loop de links simbólicos. Como acontece com os loops que
contêm links físicos, a otimização de folha
frequentemente significa que find sabe que não precisa chamar
stat() ou chdir() no link simbólico, portanto, esse
diagnóstico frequentemente não é necessário.
A opção -d é suportada para
compatibilidade com vários sistemas BSD, mas você deve usar a
opção compatível com POSIX -depth.
A variável ambiente POSIXLY_CORRECT não afeta
o comportamento dos testes -regex ou -iregex, porque estes
testes não são especificados no padrão POSIX.
- LANG
- Fornece um valor padrão para as variáveis de
internacionalização que não estão definidas ou
são nulas.
- LC_ALL
- Se definido como um valor de string não vazio, substitui os valores
de todas as outras variáveis de internacionalização.
- LC_COLLATE
- O padrão POSIX especifica que esta variável afeta a
correspondência de padrões a ser usada para a
opção -name. GNU find usa a função de
biblioteca fnmatch(3) e, portanto, o suporte para LC_COLLATE
depende da biblioteca do sistema. Essa variável também afeta
a interpretação da resposta para -ok; enquanto a
variável LC_MESSAGES seleciona o padrão atual usado
para interpretar a resposta para -ok, a interpretação
de quaisquer expressões entre colchetes no padrão
será afetada por LC_COLLATE.
- LC_CTYPE
- Essa variável afeta o tratamento das classes de caracteres usadas
nas expressões regulares e também com o teste -name,
se a função da biblioteca fnmatch(3) do sistema
suportar isso. Essa variável também afeta a
interpretação de qualquer classe de caractere nas
expressões regulares usadas para interpretar a resposta ao prompt
emitido por -ok. A variável de ambiente LC_CTYPE
também afetará quais caracteres são considerados
imprimíveis quando nomes de arquivos são impressos; consulte
a seção NOMES DE ARQUIVOS INCOMUNS.
- LC_MESSAGES
- Determina o local a ser usado para mensagens internacionalizadas. Se a
variável de ambiente POSIXLY_CORRECT for definida, isso
também determina a interpretação da resposta ao
prompt feito pela ação -ok.
- NLSPATH
- Determina a localização dos catálogos de mensagens de
internacionalização.
- PATH
- Afeta os diretórios que são pesquisados para encontrar os
executáveis chamados por -exec, -execdir, -ok
e -okdir.
- POSIXLY_CORRECT
- Determina o tamanho do bloco usado por -ls e -fls. Se
POSIXLY_CORRECT for definido, os blocos são unidades de 512
bytes. Caso contrário, eles são unidades de 1024 bytes.
- Definir essa variável também desativa as mensagens de aviso
(ou seja, implica -nowarn) por padrão, porque POSIX requer
que, além da saída para -ok, todas as mensagens
impressas em stderr são diagnósticos e devem resultar em um
status de saída diferente de zero.
- Quando POSIXLY_CORRECT não está definido, -perm
+zzz é tratado como -perm /zzz se
+zzz não for um modo simbólico válido. Quando
POSIXLY_CORRECT é definido, tais construções
são tratadas como um erro.
- Quando POSIXLY_CORRECT é definido, a resposta ao prompt
feito pela ação -ok é interpretada de acordo
com o catálogo de mensagens do sistema, ao contrário de
acordo com as traduções de mensagens do próprio
find.
- TZ
- Afeta o fuso horário usado para algumas das diretivas de formato
relacionadas ao tempo de -printf and -fprintf.
- •
- Encontra arquivos com o nome core no ou abaixo do diretório
/tmp e exclua-os.
$ find /tmp -name core -type f -print | xargs /bin/rm -f
Observe que isso não funcionará corretamente se houver nomes
de arquivo que contenham novas linhas, aspas simples ou duplas ou
espaços.
- •
- Encontra arquivos com o nome core dentro ou sob o diretório
/tmp e apaga-os, processando os nomes dos arquivos de forma que os
nomes dos arquivos ou diretórios que contenham aspas simples ou
duplas, espaços ou novas linhas sejam tratados corretamente.
$ find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
O teste -name vem antes do teste -type para evitar ter que
chamar stat(2) em cada arquivo.
Observe que ainda há uma corrida entre o momento em que
find atravessa a hierarquia imprimindo os nomes de arquivo
correspondentes e o momento em que o processo executado por xargs
funciona com aquele arquivo.
- •
- Dado que outro programa, o proggy, pré-filtra e cria uma
enorme lista de arquivos separados por NULO, processa-os como pontos de
partida e encontra todos os arquivos normais e vazios entre eles:
$ proggy | find -files0-from - -maxdepth 0 -type f -empty
O uso de `-files0-from -` significa ler os nomes dos pontos
iniciais de entrada padrão, ou seja, do pipe; e
-maxdepth 0 garante que somente essas entradas sejam
examinadas explicitamente sem recorrer a diretórios (no caso de um
dos pontos iniciais ser um).
- •
- Executa arquivo em cada arquivo no diretório atual ou abaixo
dele.
$ find . -type f -exec file '{}' \;
Observe que as chaves são colocadas entre aspas simples para
protegê-las de interpretação como
pontuação de script de shell. O ponto e vírgula
é protegido de forma semelhante pelo uso de uma barra invertida,
embora as aspas simples também possam ter sido usadas nesse
caso.
Em muitos casos, pode-se preferir a sintaxe
`-exec ... +` ou, melhor,
`-execdir ... +` por razões de desempenho e
segurança.
- •
- Percorre o sistema de arquivos apenas uma vez, listando arquivos e
diretórios ID de usuário definido em /root/suid.txt e
arquivos grandes em /root/big.txt.
$ find / \
\( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \
\( -size +100M -fprintf /root/big.txt '%-10s %p\n' \)
Este exemplo usa o caractere de continuação de linha '\' nas
primeiras duas linhas para instruir o shell a continuar lendo o comando na
próxima linha.
- •
- Procura arquivos em seu diretório inicial que foram modificados nas
últimas vinte e quatro horas.
$ find $HOME -mtime 0
Este comando funciona assim porque o tempo decorrido desde a última
modificação de cada arquivo é dividido por 24 horas e
o restante é descartado. Isso significa que para corresponder a
-mtime 0, um arquivo terá que ter uma
modificação no passado, que é menos de 24 horas
atrás.
- •
- Pesquisa arquivos que são executáveis, mas não
legíveis.
$ find /sbin /usr/sbin -executable \! -readable -print
- •
- Pesquisa arquivos que tenham permissão de leitura e
gravação para seu dono e grupo, mas que outros
usuários possam ler, mas não podem escrever.
$ find . -perm 664
Os arquivos que atendem a esses critérios, mas têm outros bits
de permissão definidos (por exemplo, se alguém pode executar
o arquivo), não serão correspondidos.
- •
- Pesquisa arquivos que tenham permissão de leitura e escrita para
seu dono e grupo e que outros usuários possam ler,
independentemente da presença de bits de permissão extras
(por exemplo, o bit executável).
$ find . -perm -664
Isso corresponderá a um arquivo que possui o modo 0777, por
exemplo.
- •
- Pesquisa por arquivos que podem ser escritos por alguém (seu dono,
seu grupo ou qualquer outra pessoa).
$ find . -perm /222
- •
- Pesquisa os arquivos que podem ser escritos pelo dono ou pelo grupo.
$ find . -perm /220
$ find . -perm /u+w,g+w
$ find . -perm /u=w,g=w
Todos os 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. Os arquivos não precisam poder ser
escritos tanto pelo dono quanto pelo grupo para serem combinados; qualquer
um servirá.
- •
- Pesquisa por arquivos que possam ser escritos tanto pelo dono quanto pelo
grupo.
$ find . -perm -220
$ find . -perm -g+w,u+w
Ambos os comandos fazem a mesma coisa.
- •
- Uma pesquisa mais elaborada sobre permissões.
$ find . -perm -444 -perm /222 \! -perm /111
$ find . -perm -a+r -perm /a+w \! -perm /a+x
Esses dois comandos procuram arquivos que são legíveis para
todos (-perm -444 ou -perm -a+r), têm pelo menos um
conjunto de bits de escrita (-perm /222 ou -perm /a+w), mas
não são executáveis para ninguém (! -perm
/111 ou ! -perm /a+x, respectivamente).
- •
- Copia o conteúdo de /dir-origem para /dir-dest, mas
omite os arquivos e diretórios chamados .snapshot (e
qualquer coisa neles). Também omite arquivos ou diretórios
cujo nome termina em "~", mas não seu conteúdo.
$ cd /dir-origem
$ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
| cpio -pmd0 /dir-dest
A construção
-prune -o \( ... -print0 \)
é bastante comum. A ideia aqui é que a expressão
antes de -prune corresponda às coisas que devem ser
removidas. No entanto, a ação -prune em si retorna
verdadeiro, então o -o a seguir garante que o lado direito
seja avaliado apenas para aqueles diretórios que não foram
removidos (o conteúdo dos diretórios removidos nem mesmo
é visitado , então seu conteúdo é
irrelevante). A expressão do lado direito do -o está
entre parênteses apenas para maior clareza. Ele enfatiza que a
ação -print0 ocorre apenas para coisas que não
tinham -prune aplicado a elas. Como a condição
"e" padrão entre os testes liga-se mais fortemente do que
-o, este é o padrão de qualquer maneira, mas os
parênteses ajudam a mostrar o que está acontecendo.
- •
- Dado o seguinte diretório de projetos e seus diretórios
administrativos SCM associados, execute uma busca eficiente pelas
raízes dos projetos:
$ find repo/ \
\( -exec test -d '{}/.svn' \; \
-or -exec test -d '{}/.git' \; \
-or -exec test -d '{}/CVS' \; \
\) -print -prune
Amostra da saída:
repo/projeto1/CVS
repo/gnu/projeto2/.svn
repo/gnu/projeto3/.svn
repo/gnu/projeto3/src/.svn
repo/projeto4/.git
Neste exemplo, -prune evita descida desnecessária em
diretórios que já foram descobertos (por exemplo, não
pesquisamos projeto3/src porque já encontramos
projeto3/.svn), mas garante diretórios irmãos
(projeto2 e projeto3) são encontrados.
- •
- Pesquisa vários tipos de arquivo.
$ find /tmp -type f,d,l
Pesquisa arquivos, diretórios e links simbólicos no
diretório /tmp passando esses tipos como uma lista separada
por vírgulas (extensão GNU), que de outra forma é
equivalente ao mais longo, porém mais portátil:
$ find /tmp \( -type f -o -type d -o -type l \)
- •
- Pesquisa por arquivos com o nome específico agulha e para
imediatamente quando encontrarmos o primeiro.
$ find / -name agulha -print -quit
- •
- Demonstra a interpretação das diretivas de formato %f
e %h da ação -printf para alguns casos
extremos. Aqui está um exemplo incluindo alguma saída.
$ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
[.][.]
[.][..]
[][/]
[][tmp]
[/tmp][TRACE]
[.][compile]
[compile/64/tests][find]
find sai com status 0 se todos os arquivos forem
processados com êxito, maior que 0 se ocorrerem erros. Esta é
uma descrição deliberadamente muito ampla, mas se o valor de
retorno for diferente de zero, você não deve confiar na
exatidão dos resultados de find.
Quando ocorre algum erro, find pode parar imediatamente,
sem completar todas as ações especificadas. Por exemplo,
alguns pontos de partida podem não ter sido examinados ou algumas
invocações de programa pendentes para
-exec ... {} + ou
-execdir ... {} + pode não ter sido
executado.
Um programa find apareceu na Versão 5 do Unix como
parte do projeto Programmer's Workbench e foi escrito por Dick Haight. A
Research UNIX Reader: Annotated Excerpts from the Programmer’s
Manual, 1971-1986 de Doug McIlroy fornece alguns detalhes adicionais;
você pode lê-lo on-line em
<https://www.cs.dartmouth.edu/~doug/reader.pdf>.
GNU find foi originalmente escrito por Eric Decker, com
melhorias de David MacKenzie, Jay Plett e Tim Wood. A ideia para find
-print0 e xargs -0 veio de Dan Bernstein.
A partir de findutils-4.2.2, os metacaracteres shell
("*", "?" ou "[]", por exemplo) usados em
padrões de nome de arquivo correspondem a um "." inicial,
porque a interpretação 126 do IEEE POSIX requer isso.
A partir de findutils-4.3.3, -perm /000 agora
corresponde a todos os arquivos em vez de nenhum.
Marcas de data e hora com resolução em nanossegundos
foram implementados em findutils-4.3.3.
A partir de findutils-4.3.11, a ação -delete
define o status de saída do find para um valor diferente de
zero quando falha. No entanto, find não será encerrado
imediatamente. Anteriormente, o status de saída de find
não era afetado pela falha de -delete.
| Recurso |
Adicionado em |
Também ocorre em |
| -files0-from |
4.9.0 |
| -newerXY |
4.3.3 |
BSD |
| -D |
4.3.1 |
| -O |
4.3.1 |
| -readable |
4.3.0 |
| -writable |
4.3.0 |
| -executable |
4.3.0 |
| -regextype |
4.2.24 |
| -exec ... + |
4.2.12 |
POSIX |
| -execdir |
4.2.12 |
BSD |
| -okdir |
4.2.12 |
| -samefile |
4.2.11 |
| -H |
4.2.5 |
POSIX |
| -L |
4.2.5 |
POSIX |
| -P |
4.2.5 |
BSD |
| -delete |
4.2.3 |
| -quit |
4.2.3 |
| -d |
4.2.3 |
BSD |
| -wholename |
4.2.0 |
| -iwholename |
4.2.0 |
| -ignore_readdir_race |
4.2.0 |
| -fls |
4.0 |
| -ilname |
3.8 |
| -iname |
3.8 |
| -ipath |
3.8 |
| -iregex |
3.8 |
A sintaxe -perm +MODO foi removida em findutils-4.5.12, em
favor de -perm /MODO. A sintaxe +MODO foi descontinuada
desde findutils-4.2.21, que foi lançado em 2005.
O comando find . -name arquivoa -o -name arquivob -print
nunca imprimirá um arquivoa porque isso é equivalente a
find . -name arquivoa -o \( -name arquivob -a -print \). Lembre-se de
que a precedência de -a é mais alta do que a de
-o e quando não há operador especificado entre os
testes, -a é presumido.
$ find . -name *.c -print
find: os caminhos devem preceder a expressão
find: padrão possivelmente sem aspas após o predicado `-name'?
Isso acontece quando o shell pode expandir o padrão
*.c para mais de um nome de arquivo existente no diretório
atual e passar os nomes de arquivo resultantes na linha de comando para
find assim:
find . -name frcode.c locate.c word_io.c -print
É claro que esse comando não vai funcionar, porque o
predicado -name permite exatamente apenas um padrão como
argumento. Em vez de fazer as coisas dessa maneira, você deve colocar
o padrão entre aspas ou escapar o caractere curinga, permitindo que
find use o padrão com o caractere curinga durante a pesquisa
de correspondência de nome de arquivo em vez de nomes de arquivo
expandidos pelo shell pai:
$ find . -name '*.c' -print
$ find . -name \*.c -print
Existem problemas de segurança inerentes ao comportamento
que o padrão POSIX especifica para find, que, portanto,
não podem ser corrigidos. Por exemplo, a ação
-exec é inerentemente insegura e -execdir deve ser
usado em seu lugar.
A variável de ambiente LC_COLLATE não tem
efeito na ação -ok.
Ajuda online do GNU findutils:
<https://www.gnu.org/software/findutils/#get-help>
Relate erros de tradução para
<https://translationproject.org/team/pt_BR.html>
Relate outros problemas por meio do formulário no
rastreador de bugs do GNU Savannah:
<https://savannah.gnu.org/bugs/?group=findutils>
Tópicos gerais sobre o pacote GNU findutils são discutidos na
lista de discussão bug-findutils:
<https://lists.gnu.org/mailman/listinfo/bug-findutils>
Copyright © 1990–2024 Free Software Foundation, Inc.
Licença GPLv3+: GNU GPL versão 3 ou posterior
<https://gnu.org/licenses/gpl.html>.
Este é um software livre: você é livre para
alterá-lo e redistribuí-lo. NÃO HÁ QUALQUER
GARANTIA, na máxima extensão permitida em lei.
chmod(1), locate(1), ls(1),
updatedb(1), xargs(1), lstat(2), stat(2),
ctime(3) fnmatch(3), printf(3), strftime(3),
locatedb(5), regex(7)
Documentação completa
<https://www.gnu.org/software/findutils/find>
Ou disponível localmente via: info find
A tradução para português brasileiro desta
página man foi criada por Rafael Fontenelle
<rafaelff@gnome.org>
Esta tradução é uma
documentação livre; leia a
Licença
Pública Geral GNU Versão 3 ou posterior para as
condições de direitos autorais. Nenhuma responsabilidade
é aceita.
Se você encontrar algum erro na tradução
desta página de manual, envie um e-mail para
a lista
de discussão de tradutores.