FIND(1)

NOME
find - pesquisa por arquivos em uma hierarquia de diretórios

SINOPSE
find [-H] [-L] [-P] [-D opçõesdepuração] [-Onível] [ponto-de-partida...] [expressão]

DESCRIÇÃ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.

OPÇÕES
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 finddetermina 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 "/".

-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çõesdepuraçã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   Any -type or -xtype tests are performed after any tests based only on the names of files, but before any tests that require information from the inode. On many modern versions of Unix, file types are returned by readdir() and so these predicates are faster to evaluate than predicates which need to stat the file first. If you use the -fstype FOO predicate and specify a filesystem type FOO which is not known (that is, present in `/etc/mtab') at the time find starts, that predicate is equivalent to -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.

    The cost-based optimiser has a fixed idea of how likely any given test is to succeed. In some cases the probability takes account of the specific nature of the test (for example, -type f is assumed to be more likely to succeed than -type c). The cost-based optimiser is currently being evaluated. If it does not actually improve the performance of find, it will be removed again. Conversely, optimisations that prove to be reliable, robust and effective may be enabled at lower optimisation levels over time. However, the default behaviour (i.e. optimisation level 1) will not be changed in the 4.3.x release series. The findutils test suite runs all the tests on find at each optimisation level and ensures that the result is the same.

EXPRESSÃ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 profundidade, 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
    Changes the regular expression syntax understood by -regex and -iregex tests which occur later on the command line. To see which regular expression types are known, use -regextype help. The Texinfo documentation (see SEE ALSO) explains the meaning of and differences between the various types of regular expression.

-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.

-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
    Descend at most levels (a non-negative integer) levels of directories below the starting-points. Using -maxdepth 0 means only apply the tests and actions to the starting-points themselves.

-mindepth níveis
    Do not apply any tests or actions at levels less than levels (a non-negative integer). Using -mindepth 1 means process all files except the starting-points.

-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.

  TESTES
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
    File was last accessed less than, more than or exactly n minutes ago.

-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
    File was last accessed less than, more than or exactly n*24 hours ago. When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.

-cmin n
    File's status was last changed less than, more than or exactly n minutes ago.

-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
    File's status was last changed less than, more than or exactly n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretation of file status change times.

-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
    File's numeric group ID is less than, more than or exactly 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
    File has inode number smaller than, greater than or exactly n. It is normally easier to use the -samefile test instead.

-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
    File's data was last modified less than, more than or exactly n minutes ago.

-mtime n
    File's data was last modified less than, more than or exactly n*24 hours ago. See the comments for -atime to understand how rounding affects the interpretation of file modification times.

-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 são removidos, os nomes de arquivos considerados para uma correspondência com -name nunca incluirão uma barra, portanto, "-name a/b" nunca corresponderá a nada (você provavelmente precisará usar -path). Um aviso será emitido se você tentar fazer isso, a menos que a variável de ambiente POSIXLY_CORRECT esteja configurada. Os metacaracteres ("*", "?" e "[]") correspondem com um "." no início do nome da base (esta é uma alteração no findutils-4.2.2; consulte a seção CONFORMIDADE COM OS PADRÕES abaixo). 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"
    will print an entry for a directory called ./src/misc (if one exists). To ignore a whole directory tree, use -prune rather than checking every file in the tree. Note that the pattern match test applies to the whole file name, starting from one of the start points named on the command line. It would only make sense to use an absolute path name here if the relevant start point is also an absolute path. This means that this command will never match anything:
    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 caminho 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
    Any of the permission bits mode are set for the file. Symbolic modes are accepted in this form. You must specify `u', `g' or `o' if you use a symbolic mode. See the EXAMPLES section for some illustrative examples. If no permission bits in mode are set, this test matches any file (the idea here is to be consistent with the behaviour of -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
    File name matches regular expression pattern. This is a match on the whole path, not a search. For example, to match a file named ./fubar3, you can use the regular expression `.*bar.' or `.*b.*3', but not `f.*r3'. The regular expressions understood by find are by default Emacs Regular Expressions (except that `.' matches newline), but this can be changed with the -regextype option.

-samefile nome
    O arquivo refere-se ao mesmo nó-i que name. Quando -L está em vigor, isso pode incluir links simbólicos.

-size n[cwbkMG]
    File uses less than, more than or exactly n units of space, rounding up. The following suffixes can be used:

    "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)

    The size is simply the st_size member of the struct stat populated by the lstat (or stat) system call, rounded up as shown above. In other words, it's consistent with the result you get for ls -l. Bear in mind that the `%k' and `%b' format specifiers of -printf handle sparse files differently. The `b' suffix always denotes 512-byte blocks and never 1024-byte blocks, which is different to the behaviour of -ls.

    The + and - prefixes signify greater than and less than, as usual; i.e., an exact size of n units does not match. Bear in mind that the size is rounded up to the next unit. Therefore -size -1M is not equivalent to -size -1048576c. The former only matches empty files, the latter matches files from 0 to 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   soquete

    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
    File was last accessed less than, more than or exactly n days after its status was last changed.

-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.

-context padrão
    (SELinux somente) O contexto de segurança do arquivo corresponde ao glob padrão.

  AÇÕES

-delete
    Exclui arquivos; verdadeiro se a remoção for bem-sucedida. Se a remoção falhar, uma mensagem de erro será emitida. Se -delete falhar, o status de saída de find será diferente de zero (quando eventualmente sair). O uso de -delete ativa automaticamente a opção "-depth". Avisos: Não se esqueça de que a linha de comando do find é avaliada como uma expressão, portanto, colocar -delete primeiro fará com que find tente excluir tudo abaixo dos pontos iniciais especificados. Ao testar uma linha de comando find que você mais tarde pretende usar com -delete, você deve especificar explicitamente -depth para evitar surpresas posteriores. Como -delete implica -pth, você não pode usar -prune e -delete juntos. 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 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 {} +
    This variant of the -exec action runs the specified command on the selected files, but the command line is built by appending each selected file name at the end; the total number of invocations of the command will be much less than the number of matched files. The command line is built in much the same way that xargs builds its command lines. Only one instance of `{}' is allowed within the command, and it must appear at the end, immediately before the `+'; it needs to be escaped (with a `\') or quoted to protect it from interpretation by the shell. The command is executed in the starting directory. If any invocation with the `+' form returns a non-zero value as exit status, then find returns a non-zero exit status. If find encounters an error, this can sometimes cause an immediate exit, so some pending commands may not be run at all. For this reason -exec my-command ... {} + -quit may not result in my-command actually being run. This variant of -exec always returns true.

-execdir comando ;

-execdir comando {} +
    Like -exec, but the specified command is run from the subdirectory containing the matched file, which is not normally the directory in which you started find. As with -exec, the {} should be quoted if find is being invoked from a shell. This a much more secure method for invoking commands, as it avoids race conditions during resolution of the paths to the matched files. As with the -exec action, the `+' form of -execdir will build a command line to process more than one matched file, but any given invocation of command will only list files that exist in the same subdirectory. If you use this option, you must ensure that your $PATH environment variable does not reference `.'; otherwise, an attacker can run any commands they like by leaving an appropriately-named file in a directory in which you will run -execdir. The same applies to having entries in $PATH which are empty or which are not absolute directory names. If any invocation with the `+' form returns a non-zero value as exit status, then find returns a non-zero exit status. If find encounters an error, this can sometimes cause an immediate exit, so some pending commands may not be run at all. The result of the action depends on whether the + or the ; variant is being used; -execdir command {} + always returns true, while -execdir command {} ; returns true only if command returns 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
    True; print the full file name into file file. If file does not exist when find is run, it is created; if it does exist, it is truncated. The file names /dev/stdout and /dev/stderr are handled specially; they refer to the standard output and standard error output, respectively. The output file is always created, even if the predicate is never matched. See the UNUSUAL FILENAMES section for information about how unusual characters in filenames are handled.

-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 ;
    Like -exec but ask the user first. If the user agrees, run the command. Otherwise just return false. If the command is run, its standard input is redirected from /dev/null.

    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 ;
    Like -execdir but ask the user first in the same way as for -ok. If the user does not agree, just return false. If the command is run, its standard input is redirected from /dev/null.

-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
    Verdade; 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
    True; print format on the standard output, interpreting `\' escapes and `%' directives. Field widths and precisions can be specified as with the printf(3) C function. Please note that many of the fields are printed as %s rather than %d, and this may mean that flags don't work as you might expect. This also means that the `-' flag does work (it forces fields to be left-aligned). Unlike -print, -printf does not add a newline at the end of the string. The escapes and directives are:

    \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  File's last access time in the format returned by the C ctime(3) function.

    %Ak File's last access time in the format specified by k, which is either `@' or a directive for the C strftime(3) function. The following shows an incomplete list of possible values for k. Please refer to the documentation of strftime(3) for the full list. Some of the conversion specification characters might not be available on all systems, due to differences in the implementation of the strftime(3) library function.

        @   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.

    %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; the Leading directories of the file's name (all but the last element). If the file name contains no slashes (since it is in the current directory) the %h specifier expands to `.'. For files which are themselves directories and contain a slash (including /), %h expands to the empty string. See the EXAMPLES section for an example.

    %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  File's last modification time in the format returned by the C ctime(3) function.

    %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  File's type (like %y), plus follow symbolic links: `L'=loop, `N'=nonexistent, `?' for any other error when determining the type of the target of a symbolic link.

    %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. The %m and %d directives support the #, 0 and + flags, but the other directives do not, even if they print numbers. Numeric directives that do not support these flags include G, U, b, D, k and n. The `-' format flag is supported and changes the alignment of a field from right-justified (which is the default) to left-justified.

    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
    Exit immediately (with return value zero if no errors have occurred). This is different to -prune because -prune only applies to the contents of pruned directories, while -quit simply makes find stop immediately. No child processes will be left running. Any command lines which have been built by -exec ... + or -execdir ... + are invoked before the program is exited. After -quit is executed, no more files specified on the command line will be processed. For example, `find /tmp/foo /tmp/bar -print -quit` will print only `/tmp/foo`.
    One common use of -quit is to stop searching the file system once we have found what we want. For example, if we want to find just a single file we can do this:
    find / -name needle -print -quit

  OPERADORES
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.

NOMES DE ARQUIVOS INCOMUNS
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.

CONFORMIDADE COM OS PADRÕES
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
    This option is supported, but POSIX conformance depends on the POSIX conformance of the system's fnmatch(3) library function. As of findutils-4.2.2, shell metacharacters (`*', `?' or `[]' for example) match a leading `.', because IEEE PASC interpretation 126 requires this. This is a change from previous versions of 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.

The POSIX standard specifies parentheses `(', `)', negation `!' and the logical AND/OR operators -a and -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.

VARIÁVEIS DE AMBIENTE

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.

    When POSIXLY_CORRECT is not set, -perm +zzz is treated just like -perm /zzz if +zzz is not a valid symbolic mode. When POSIXLY_CORRECT is set, such constructs are treated as an error.

    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 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.

EXEMPLOS

  Abordagem simples de `find|xargs`

•   Find files named core in or below the directory /tmp and delete them.

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

    Note that this will work incorrectly if there are any filenames containing newlines, single or double quotes, or spaces.

  Safer `find -print0 | xargs -0` approach

•   Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing single or double quotes, spaces or newlines are correctly handled.

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

    The -name test comes before the -type test in order to avoid having to call stat(2) on every file.

Note that there is still a race between the time find traverses the hierarchy printing the matching filenames, and the time the process executed by xargs works with that file.

  Executando um comando para cada arquivo

•   Run file on every file in or below the current directory.

    $ find . -type f -exec file '{}' \;

    Notice that the braces are enclosed in single quote marks to protect them from interpretation as shell script punctuation. The semicolon is similarly protected by the use of a backslash, though single quotes could have been used in that case also.

In many cases, one might prefer the `-exec ... +` or better the `-execdir ... +` syntax for performance and security reasons.

  Percorrendo o sistema de arquivos apenas uma vez -- para 2 ações diferentes

•   Traverse the filesystem just once, listing set-user-ID files and directories into /root/suid.txt and large files into /root/big.txt.

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

    This example uses the line-continuation character '\' on the first two lines to instruct the shell to continue reading the command on the next line.

  Pesquisando arquivos por idade

•   Search for files in your home directory which have been modified in the last twenty-four hours.

    $ find $HOME -mtime 0

    This command works this way because the time since each file was last modified is divided by 24 hours and any remainder is discarded. That means that to match -mtime 0, a file will have to have a modification in the past which is less than 24 hours ago.

  Pesquisando arquivos por permissões

•   Pesquisa arquivos que são executáveis, mas não legíveis.

    $ find /sbin /usr/sbin -executable \! -readable -print

•   Search for files which have read and write permission for their owner, and group, but which other users can read but not write to.

    $ find . -perm 664

    Files which meet these criteria but have other permissions bits set (for example if someone can execute the file) will not be matched.

•   Search for files which have read and write permission for their owner and group, and which other users can read, without regard to the presence of any extra permission bits (for example the executable bit).

    $ find . -perm -664

    This will match a file which has mode 0777, for example.

•   Pesquisa por arquivos que podem ser escritos por alguém (seu dono, seu grupo ou qualquer outra pessoa).

    $ find . -perm /222

•   Search for files which are writable by either their owner or their group.

    $ find . -perm /220
    $ find . -perm /u+w,g+w
    $ find . -perm /u=w,g=w

    All three of these commands do the same thing, but the first one uses the octal representation of the file mode, and the other two use the symbolic form. The files don't have to be writable by both the owner and group to be matched; either will do.

•   Search for files which are writable by both their owner and their group.

    $ find . -perm -220
    $ find . -perm -g+w,u+w

    Both these commands do the same thing.

•   A more elaborate search on permissions.

    $ find . -perm -444 -perm /222 \! -perm /111
    $ find . -perm -a+r -perm /a+w \! -perm /a+x

    These two commands both search for files that are readable for everybody (-perm -444 or -perm -a+r), have at least one write bit set (-perm /222 or -perm /a+w) but are not executable for anybody (! -perm /111 or ! -perm /a+x respectively).

  Pruning - omitting files and subdirectories

•   Copy the contents of /source-dir to /dest-dir, but omit files and directories named .snapshot (and anything in them). It also omits files or directories whose name ends in '~', but not their contents.

    $ cd /source-dir
    $ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
    | cpio -pmd0 /dest-dir

    The construct -prune -o \( ... -print0 \) is quite common. The idea here is that the expression before -prune matches things which are to be pruned. However, the -prune action itself returns true, so the following -o ensures that the right hand side is evaluated only for those directories which didn't get pruned (the contents of the pruned directories are not even visited, so their contents are irrelevant). The expression on the right hand side of the -o is in parentheses only for clarity. It emphasises that the -print0 action takes place only for things that didn't have -prune applied to them. Because the default `and' condition between tests binds more tightly than -o, this is the default anyway, but the parentheses help to show what is going on.

•   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/project1/CVS
    repo/gnu/project2/.svn
    repo/gnu/project3/.svn
    repo/gnu/project3/src/.svn
    repo/project4/.git

    In this example, -prune prevents unnecessary descent into directories that have already been discovered (for example we do not search project3/src because we already found project3/.svn), but ensures sibling directories (project2 and project3) are found.

  Outros exemplos úteis

•   Search for several file types.

    $ find /tmp -type f,d,l

    Search for files, directories, and symbolic links in the directory /tmp passing these types as a comma-separated list (GNU extension), which is otherwise equivalent to the longer, yet more portable:

    $ find /tmp \( -type f -o -type d -o -type l \)

•   Search for files with the particular name needle and stop immediately when we find the first one.

    $ find / -name needle -print -quit

•   Demonstrate the interpretation of the %f and %h format directives of the -printf action for some corner-cases. Here is an example including some output.

    $ find . .. / /tmp /tmp/TRACE compile compile/64/tests/find -maxdepth 0 -printf '[%h][%f]\n'
    [.][.]
    [.][..]
    [][/]
    [][tmp]
    [/tmp][TRACE]
    [.][compile]
    [compile/64/tests][find]

STATUS DE SAÍDA
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. When some error occurs, find may stop immediately, without completing all the actions specified. For example, some starting points may not have been examined or some pending program invocations for -exec ... {} + or -execdir ... {} + may not have been performed.

HISTÓRICO
As of findutils-4.2.2, shell metacharacters (`*', `?' or `[]' for example) used in filename patterns match a leading `.', because IEEE POSIX interpretation 126 requires this.

As of findutils-4.3.3, -perm /000 now matches all files instead of none.

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
-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 +MODE foi removida em findutils-4.5.12, em favor de -perm /MODE. A sintaxe +MODE foi descontinuada desde findutils-4.2.21, que foi lançado em 2005.

NÃO BUGS

  Surpresas de precedência de operadores
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.

  Mensagem de erro “os caminhos devem preceder a expressão”
$ 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

BUGS
There are security problems inherent in the behaviour that the POSIX standard specifies for find, which therefore cannot be fixed. For example, the -exec action is inherently insecure, and -execdir should be used instead.

A variável de ambiente LC_COLLATE não tem efeito na ação -ok.

RELATANDO PROBLEMAS
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>

DIREITOS AUTORAIS
Copyright © 1990-2021 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.

VEJA TAMBÉM
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

TRADUÇÃO
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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 (debian-l10n-portuguese@lists.debian.org).