- SINTAXE
- DESCRIÇÃO
- OPÇÕES
- EXPRESSÃO
- NOMES DE ARQUIVOS INCOMUNS
- CONFORMIDADE COM OS PADRÕES
- VARIÁVEIS DE AMBIENTE
- EXEMPLOS
- Abordagem simples `find|xargs`
- Abordagem mais segura para `find -print0 | xargs -0`
- Processando pontos de partida arbitrários
- Executando um comando para cada arquivo
- Percorrendo o sistema de arquivos apenas uma vez - para 2 ações diferentes
- Pesquisando arquivos por idade
- Pesquisando arquivos por permissões
- Podando - omitindo arquivos e subdiretórios
- Outros exemplos úteis
- STATUS DE SAÍDA
- HISTÓRICO
- COMPATIBILIDADE
- NÃO SÃO BUGS
- BUGS
- RELATANDO BUGS
- DIREITOS AUTORAIS
- VEJA TAMBÉM
find - pesquisar arquivos em uma hierarquia de diretórios
SINTAXE
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [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 fornecido, avaliando a expressão dada da esquerda para a direita, de acordo com as regras de precedência (veja a seção OPERADORES), até que o resultado seja conhecido (o lado esquerdo é falso para operações "and", verdadeiro para operações "or"), ponto em que o find passa para o próximo nome de arquivo. Se nenhum ponto de partida for especificado, `.' é assumido.
Se você estiver usando o find em um ambiente onde a segurança é importante (por exemplo, se você estiver usando-o para pesquisar diretórios que são graváveis por outros usuários), você deve ler o capítulo `Considerações de Segurança' da documentação do findutils, que se chama Encontrando Arquivos e acompanha o findutils. Esse documento também inclui muito mais detalhes e discussões do que esta página de manual, portanto, você pode achá-lo 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 que as seguem 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 quaisquer argumentos subsequentes são considerados a expressão que descreve o que deve ser pesquisado. Se nenhum caminho for fornecido, o diretório atual é usado. Se nenhuma expressão for fornecida, a expressão -print é usada (mas você deveria considerar usar -print0 em vez disso).
Esta página de manual fala sobre `opções' dentro da lista de expressões. Essas opções controlam o comportamento do find, mas são especificadas imediatamente após o último nome de caminho. As cinco `opções reais' -H, -L, -P, -D e -O devem aparecer antes do primeiro nome de caminho, se for o caso. Um duplo hífen -- poderia teoricamente ser usado para indicar que quaisquer argumentos restantes não são opções, mas isso realmente não funciona devido à forma como o find determina o final dos argumentos de caminho que o seguem: ele faz isso lendo até que um argumento de expressão apareça (que também começa com um `-'). Agora, se um argumento de caminho começar com um `-\', então o find o tratará como um argumento de expressão em vez disso. Assim, para garantir que todos os pontos de partida sejam tratados como tal, e especialmente para evitar que padrões curinga expandidos pelo shell de chamada sejam tratados erroneamente como argumentos de expressão, é geralmente mais seguro prefixar padrões curinga ou nomes de caminho duvidosos com `./' ou usar nomes de caminho absolutos começando com `/'. Alternativamente, é geralmente seguro, embora não seja portátil, usar a opção GNU -files0-from para passar pontos de partida arbitrários para o find.
-P Nunca siga links simbólicos. Este é o comportamento padrão. Quando o `find` examina ou imprime
informações sobre arquivos, e o arquivo é um link simbólico, as informações usadas devem ser
obtidas das propriedades do próprio link simbólico.
-L Siga links simbólicos. Quando o `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, e não
das propriedades do link em si (a menos que seja um link simbólico quebrado ou o `find` não consiga examinar
o arquivo para o qual o link aponta). O uso desta opção implica em `-noleaf`. Se você usar a
opção `-P` posteriormente, `-noleaf` ainda estará em efeito. Se `-L` estiver em efeito e o `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 efeito, o predicado -type sempre corresponderá ao tipo do
arquivo para o qual um link simbólico aponta, em vez do próprio link (a menos que o link simbólico
esteja quebrado). Ações que podem fazer com que links simbólicos se tornem quebrados enquanto o find está sendo executado (por exemplo, -delete) podem levar a um comportamento confuso. O uso de -L faz com que os predicados -lname e -ilname sempre retornem falso.
-H Não siga links simbólicos, exceto ao processar os argumentos da linha de comando. Quando
o `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 este comportamento é quando
um arquivo especificado na linha de comando é um link simbólico, e o link pode ser resolvido.
Nessa situação, as informações usadas são obtidas do arquivo para o qual o link aponta (ou seja, o link é seguido). As informações sobre o próprio link são usadas como um fallback se
o arquivo apontado pelo link simbólico não puder ser examinado. Se `-H` estiver em efeito 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` impediria isso).
Se mais de uma das opções -H, -L e -P for especificada, cada uma substitui as outras; a última
opção que aparecer na linha de comando é a que entra em vigor. Como é o padrão, a opção -P deve ser considerada como estando em efeito, a menos que -H ou -L sejam especificados.
O find do GNU frequentemente estatiza arquivos durante o processamento da linha de comando, antes que qualquer pesquisa tenha começado. Essas opções também afetam como esses argumentos são processados. Especificamente,
existem vários testes que comparam arquivos listados na linha de comando com um arquivo que estamos
atualmente considerando. Em cada caso, o arquivo especificado na linha de comando terá sido examinado e algumas de suas propriedades terão sido salvas. Se o arquivo nomeado for, de fato, um link simbólico, e a opção -P estiver em efeito (ou se nem -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, elas
serão obtidas das propriedades do arquivo para o qual o link aponta. Se o find não puder seguir o link
(por exemplo, porque não tem privilégios suficientes 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/hora será obtido 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 entre em vigor no ponto em que aparece (ou seja, se -L não for usado, mas -follow for, quaisquer links simbólicos que aparecem após -follow na linha de comando serão desreferenciados, e aqueles que aparecem antes não serão).
-D debugopts
Imprime informações de diagnóstico; isso pode ser útil para diagnosticar problemas sobre por que o find não está fazendo o que você deseja. A lista de opções de depuração deve ser separada por vírgulas. A compatibilidade das opções de depuração não é garantida entre as versões do findutils. Para uma lista completa de 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ão; veja a opção -O.
rates Imprime um resumo indicando com que frequência cada predicado teve sucesso ou falhou.
search Navega na árvore de diretórios detalhadamente.
stat Imprime mensagens à medida que os arquivos são examinados com as chamadas de 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 (mas não help).
help Explica as opções de depuração.
-Olevel
Habilita a otimização de consulta. O programa find reorganiza os testes para acelerar a execução, preservando o efeito geral; ou seja, os predicados com efeitos colaterais não são reorganizados em relação uns aos outros. As otimizações realizadas 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 reorganizadas para que os testes baseados apenas nos nomes dos arquivos (por exemplo, -name e -regex) sejam executados primeiro.
2 Quaisquer testes -type ou -xtype são executados após quaisquer testes baseados apenas nos nomes dos arquivos, mas antes de quaisquer testes que exijam informações do inode. 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 de stat no arquivo primeiro. Se você usar o predicado -fstype FOO e especificar um tipo de sistema de arquivos FOO que não seja conhecido (ou seja, presente em /etc/mtab) quando o find for iniciado, esse predicado é equivalente a -false.
3 Na este nível de otimização, o otimizador de consultas baseado em custos é ativado.
A ordem dos testes é modificada para que os testes mais rápidos (ou seja, de menor custo) sejam executados primeiro e os mais caros sejam executados posteriormente, se necessário. Dentro de cada faixa de custo, os predicados são avaliados mais cedo ou mais tarde, dependendo se é provável que tenham sucesso ou não. Para -o, os predicados que provavelmente terão sucesso são avaliados mais cedo, e para -a, os predicados que provavelmente falharão são avaliados mais cedo.
O otimizador baseado em custos tem uma ideia fixa de quão provável é que qualquer teste tenha sucesso. Em alguns casos, a probabilidade leva em consideração a natureza específica do teste (por exemplo, -type f é considerado mais provável de ter sucesso do que -type c). O otimizador baseado em custos está sendo avaliado atualmente. Se não melhorar realmente o desempenho do find, será removido novamente. Por outro lado, as otimizações que se provarem confiáveis, robustas e eficazes podem ser habilitadas em níveis de otimização mais baixos ao longo do tempo. No entanto, o comportamento padrão (ou seja, o nível de otimização 1) não será alterado na série de lançamentos 4.3.x. O conjunto de testes do findutils executa todos os testes no find em cada nível de otimização e garante que o resultado seja o mesmo.
O reordenamento de operações realizado pelo otimizador baseado em custos pode resultar em alterações de comportamento visíveis ao usuário. Por exemplo, os predicados -readable e -empty são sensíveis ao reordenamento. Se forem executados na ordem -empty -readable, uma mensagem de erro será exibida para diretórios não legíveis. Se forem executados na ordem -readable -empty, nenhuma mensagem de erro será exibida. Esta é a razão pela qual esse reordenamento de operações não é realizado no nível de otimização padrão.
EXPRESSÃO
A parte da linha de comando após a lista de pontos de partida é a expressão. Esta é uma forma de especificação de consulta que descreve como correspondemos a arquivos e o que fazemos com os arquivos que foram correspondidos. Uma expressão é composta por uma sequência de elementos:
Testes Os testes retornam um valor verdadeiro ou falso, geralmente com base em alguma propriedade do 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 em terem ou não sucesso. 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 especificadas em qualquer parte da linha de comando. As opções globais sempre retornam verdadeiro. A opção -depth, por exemplo, faz com que o find percorra o sistema de arquivos em uma ordem de busca em profundidade.
Opções posicionais As opções posicionais afetam apenas os testes ou ações que as seguem. As opções posicionais sempre retornam verdadeiro. A opção -regextype, por exemplo, é posicional, especificando o dialeto de expressão regular para expressões regulares que ocorrem posteriormente na linha de comando.
Operadores Os operadores juntam os outros itens dentro da expressão. Eles incluem, por exemplo, -o (significando OU lógico) e -a (significando E lógico). Onde um operador está faltando, -a é assumido.
A ação -print é realizada em todos os arquivos para os quais a expressão inteira é verdadeira, a menos que contenha uma ação diferente de -prune ou -quit. 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 (já que implica -depth).
OPÇÕES POSICIONAIS
As opções posicionais sempre retornam verdadeiro. Elas afetam apenas os testes que ocorrem posteriormente na linha de comando.
-daystart
Mede os tempos (para -amin, -atime, -cmin, -ctime, -mmin e -mtime) a partir do início do dia atual, em vez de 24 horas atrás. Esta opção afeta apenas os testes que aparecem posteriormente na linha de comando.
-follow
Obsoleto; use a opção -L em vez disso. Desreferencia links simbólicos. Implica -noleaf. A opção -follow afeta apenas os testes que aparecem após ela 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; quaisquer arquivos listados como o 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 do arquivo para o qual um link simbólico aponta, em vez do próprio link. O uso de -follow faz com que os predicados -lname e -ilname sempre retornem falso.
-regextype type
Altera a sintaxe de 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 Texinfo (veja 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, o find se comporta 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 o find possa encontrar ao pesquisar 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 comando for produzida, o status de saída do find não será afetado. Se a variável de ambiente POSIXLY_CORRECT estiver definida e -warn também for usado, não está especificado quais, se houver, avisos estarão ativos.
OPÇÕES GLOBAIS
As opções globais sempre retornam verdadeiro. As opções globais têm efeito 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, logo antes do primeiro teste, opção posicional ou ação. Se você especificar uma opção global em algum outro lugar, o find emitirá uma mensagem de aviso explicando que isso pode ser confuso.
As opções globais ocorrem após a lista de pontos de partida e, portanto, não são do 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 -delete também implica -depth.
-files0-from arquivo
Lê os pontos de partida do 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, nomeadamente a limitação da quantidade de nomes de arquivos e a ambiguidade inerente de nomes de arquivos que entram em conflito com nomes de opções, o uso desta opção permite passar um número arbitrário de pontos de partida para encontrar.
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 de arquivo é obrigatório. Pode-se usar -files0-from - para ler a lista de pontos de partida do fluxo de entrada padrão e, por exemplo, de um pipe. Neste caso, as ações -ok e -okdir não são permitidas, porque obviamente interfeririam na leitura da entrada padrão para obter uma confirmação do usuário.
Os pontos de partida no arquivo devem ser separados por caracteres NUL ASCII. Dois caracteres NUL consecutivos, ou seja, um ponto de partida com um nome de arquivo de comprimento zero, não são permitidos e levarão a uma mensagem de diagnóstico de erro seguida por um código de saída diferente de zero mais tarde.
No caso de o arquivo fornecido estar vazio, o find não processa nenhum ponto de partida e, portanto, sai imediatamente após analisar os argumentos do programa. Isso é diferente da invocação padrão, onde o find assume o diretório atual como ponto de partida, caso nenhum argumento de caminho seja passado.
O processamento dos pontos de partida é, caso contrário, como de costume, por exemplo, o find irá percorrer subdiretórios, a menos que seja impedido de fazê-lo. Para processar apenas os pontos de partida, pode-se adicionar -maxdepth 0.
Notas adicionais: se um arquivo for listado mais de uma vez no arquivo de entrada, não é especificado se ele será visitado mais de uma vez. Se o arquivo for modificado durante a operação do find, o resultado também não é especificado. Finalmente, a posição de busca dentro do arquivo nomeado no momento em que o find sai, seja com -quit ou de qualquer outra forma, também não é especificada. Por "não especificado" aqui, entende-se que 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 do findutils para versão.
-help, --help
Imprime um resumo do uso da linha de comando do find e sai.
-ignore_readdir_race
Normalmente, o find emitirá uma mensagem de erro quando falhar em obter o status de um arquivo. Se você fornecer esta opção e um arquivo for excluído entre o momento em que o find lê o nome do arquivo do diretório e o momento em que tenta obter o status do arquivo, nenhuma mensagem de erro será emitida. Isso também se aplica a arquivos ou diretórios cujos nomes são fornecidos na linha de comando. Esta opção entra em vigor quando a linha de comando é lida, o que significa que você não pode pesquisar uma parte do sistema de arquivos com esta opção ativada e outra parte com esta opção desativada (se precisar fazer isso, deverá emitir dois comandos find, um com a opção e outro sem ela).
Além disso, usar a opção -ignore_readdir_race ignorará os erros da ação -delete no caso em que o arquivo desapareceu desde que o diretório pai foi lido: não produzirá uma mensagem de erro e o código de retorno da ação -delete será verdadeiro.
-maxdepth levels
Desça no máximo levels (um inteiro não negativo) níveis de diretórios abaixo dos pontos de partida. Usar -maxdepth 0 significa aplicar os testes e ações apenas aos próprios pontos de partida.
-mindepth levels
Não aplique nenhum teste ou ação em níveis menores que levels (um inteiro não negativo). Usar -mindepth 1 significa processar todos os arquivos, exceto os pontos de partida.
-mount Não desça em diretórios em outros sistemas de arquivos. Um nome alternativo para -xdev, para compatibilidade com algumas outras versões do find.
-noignore_readdir_race
Desativa o efeito de -ignore_readdir_race.
-noleaf
Não otimize assumindo que os diretórios contêm 2 subdiretórios a menos do que sua contagem de links rígidos. Esta opção é necessária ao pesquisar sistemas de arquivos que não seguem a convenção de links de diretório Unix, como sistemas de arquivos CD-ROM ou MS-DOS ou pontos de montagem de volume AFS. Cada diretório em um sistema de arquivos Unix normal tem pelo menos 2 links rígidos: seu nome e sua entrada '. Além disso, seus subdiretórios (se houver) têm cada um uma entrada '..' vinculada a esse diretório. Quando o find está examinando um diretório, depois de ter feito stat de 2 subdiretórios a menos do que a contagem de links do diretório, ele sabe que o restante das entradas no diretório não são diretórios (arquivos "folha" na árvore de diretórios). Se apenas os nomes dos arquivos precisam ser examinados, não há necessidade de fazer stat deles; isso oferece um aumento significativo na velocidade de pesquisa.
-version, --version
Imprime o número da versão do find e sai.
-xdev Não desça em 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 atualmente 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 quaisquer opções -follow anteriores, 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 de sistema stat(2) falhar para ele), uma mensagem de erro será exibida e o 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) da seguinte forma:
+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.
-anewer referência
O tempo do último acesso do arquivo atual é mais recente do que o tempo da última modificação de dados do arquivo de referência. Se a referência for um link simbólico e a opção -H ou a opção -L estiver em vigor, o tempo da última modificação de dados do arquivo para o qual ele aponta será sempre usado.
-atime n
O arquivo foi acessado pela última vez há menos, mais ou exatamente n*24 horas. Quando o find calcula quantos períodos de 24 horas se passaram desde o último acesso ao arquivo, qualquer parte fracionária é ignorada, portanto, para corresponder a -atime +1, um arquivo deve ter sido acessado há pelo menos dois dias.
-cmin n
O status do arquivo foi alterado pela última vez há menos, mais ou exatamente n minutos.
-cnewer referência
O tempo da última alteração de status do arquivo atual é mais recente do que o tempo da última modificação de dados do arquivo de referência. Se a referência for um link simbólico e a opção -H ou a opção -L estiver em vigor, o tempo da última modificação de dados do arquivo para o qual ele aponta será sempre usado.
-ctime n
O status do arquivo foi alterado pela última vez há menos, mais ou exatamente n*24 horas. Consulte os comentários para -atime para entender como o arredondamento afeta a interpretação dos tempos de alteração de status do arquivo.
-empty O arquivo está vazio e é um arquivo regular ou um diretório.
-executable
Corresponde a arquivos que são executáveis e diretórios que são pesquisáveis (no sentido de resolução de nomes de arquivos) pelo usuário atual. Isso leva em consideração as listas de controle de acesso e outros artefatos de permissão que o teste -perm ignora. Este teste usa a chamada de sistema access(2) e, portanto, pode ser enganado por servidores NFS que fazem mapeamento de UID (ou rootsquashing), pois muitos sistemas implementam access(2) no kernel do cliente e, portanto, não podem usar as informações de mapeamento de UID mantidas no servidor. Como este teste é baseado apenas no resultado da chamada de sistema access(2), não há garantia de que um arquivo para o qual este 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 sistema de arquivos que são aceitos em alguma versão do Unix é: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Você pode usar -printf com o diretivo %F para ver os tipos de seus sistemas de arquivos.
-gid n O ID de grupo numérico do arquivo é menor, maior ou exatamente n.
-group gname
O arquivo pertence ao grupo gname (ID de grupo numérico permitido).
-ilname padrão
Semelhante a -lname, mas a correspondência não diferencia maiúsculas de minúsculas. Se a opção -L ou a opção -follow estiver em vigor, este teste retorna falso, a menos que o link simbólico esteja quebrado.
-iname padrão
Semelhante a -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 arquivos `Foo`, `FOO`, `foo`, `fOo`, etc. O padrão `*foo*` também corresponderá
a um arquivo chamado `.foobar`.
-inum n
O arquivo tem um número de inode menor, maior ou exatamente igual a n. Normalmente, é
mais fácil usar o teste -samefile.
-ipath padrão
Semelhante a -path, mas a correspondência não diferencia maiúsculas de minúsculas.
-iregex padrão
Semelhante a -regex, mas a correspondência não diferencia maiúsculas de minúsculas.
-iwholename padrão
Veja -ipath. Esta alternativa é menos portátil do que -ipath.
-links n
O arquivo tem menos, mais ou exatamente n links físicos.
-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 `.' de forma especial. Se a opção -L ou a opção -follow estiver em vigor, este
teste retorna falso, a menos que o link simbólico esteja quebrado.
-mmin n
Os dados do arquivo foram modificados pela última vez há menos de, mais de ou exatamente n minutos.
-mtime n
Os dados do arquivo foram modificados pela última vez há menos de, mais de ou exatamente n*24 horas. Veja
os comentários para -atime para entender como o arredondamento afeta a interpretação dos tempos de modificação do arquivo.
-name padrão
A base do nome do arquivo (o caminho com os diretórios iniciais removidos) corresponde ao padrão de shell
padrão. Como os diretórios iniciais dos nomes dos arquivos são removidos, o padrão
não deve incluir uma barra, porque `-name a/b` nunca corresponderá a nada (e você provavelmente desejará usar -path em vez disso). Uma exceção a isso é quando você 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 que contenha uma - mas não consista apenas 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 abaixo dele, use -prune em vez de verificar cada arquivo
na árvore; veja um exemplo na descrição dessa ação. As chaves não são reconhecidas
como sendo especiais, apesar do fato de que alguns shells, incluindo o Bash, atribuem um significado especial às chaves em padrões de shell. A correspondência de nomes de arquivos é realizada com o uso da
função de 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 tempo da última modificação dos dados do arquivo atual é mais recente do que o da
última modificação dos dados do arquivo de referência. Se a referência for um link simbólico e a opção -H
ou a opção -L estiver em vigor, o tempo da última modificação dos dados do arquivo ao qual ele aponta será sempre usado.
-newerXY referência
Sucedido se o timestamp X do arquivo que está sendo considerado for mais recente do que o timestamp Y do arquivo
de referência. As letras X e Y podem ser qualquer uma das seguintes letras:
a O tempo de acesso da referência do arquivo
B O tempo de criação da referência do arquivo
c O tempo de alteração do status do inode da referência
m O tempo de modificação da referência do arquivo
t A referência é interpretada 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, um erro fatal ocorrerá. 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 refere ao tempo de criação de arquivos que estão sendo examinados, este teste falhará para quaisquer arquivos em que o tempo de criação seja desconhecido.
-nogroup
Nenhum grupo corresponde ao ID de grupo numérico do arquivo.
-nouser
Nenhum usuário corresponde ao ID de usuário numérico do arquivo.
-path padrão
O nome do arquivo corresponde ao padrão do shell padrão. Os metacaracteres não tratam '`/' ou '`.` de forma especial; portanto, por exemplo, find . -path "./sr*sc" irá imprimir uma entrada para um diretório chamado ./src/misc (se existir). Para ignorar uma árvore de diretórios inteira, use -prune em vez de verificar cada arquivo na árvore. Observe que o teste de correspondência de padrão se aplica ao nome completo do arquivo, começando em um dos pontos de partida especificados na linha de comando. Só faria sentido usar um nome de caminho absoluto aqui se o ponto de partida relevante também for um caminho absoluto. Isso significa que este comando nunca corresponderá a nada: find bar -path /foo/bar/myfile -print Find compara o argumento -path com a concatenação de um nome de diretório e o nome base do arquivo que está examinando. Como a concatenação nunca terminará com uma barra, os argumentos -path que terminam com uma barra não corresponderão a nada (exceto talvez um ponto de partida especificado na linha de comando). O predicado -path também é suportado pelo HP-UX find e faz parte do padrão POSIX 2008.
-perm modo
Os bits de permissão do arquivo são exatamente o modo (octal ou simbólico). Como uma correspondência exata é necessária, se você quiser usar este formato para modos simbólicos, talvez precise especificar uma string de modo bastante complexa. Por exemplo, -perm g=w corresponderá apenas a arquivos que têm 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 os formatos '/' ou '-', por exemplo, -perm -g=w, que corresponde a qualquer arquivo com permissão de gravação de grupo. Consulte a seção EXEMPLOS para obter alguns exemplos ilustrativos.
-perm -modo
Todos os bits de permissão de modo estão definidos para o arquivo. Modos simbólicos são aceitos neste formato, e esta é geralmente a forma como você deseja usá-los. Você deve especificar 'u', 'g' ou 'o' se usar um modo simbólico. Consulte a seção EXEMPLOS para obter alguns exemplos ilustrativos.
-perm /modo
Qualquer um dos bits de permissão de modo está definido para o arquivo. Modos simbólicos são aceitos neste formato. Você deve especificar 'u', 'g' ou 'o' se usar um modo simbólico. Consulte a seção EXEMPLOS para obter alguns exemplos ilustrativos. Se nenhum bit de permissão em modo estiver definido, este teste corresponderá a qualquer arquivo (a ideia aqui é ser consistente com o comportamento de -perm -000).
-perm +mode
Não é mais suportado (e está obsoleto desde 2005). Use -perm /mode em vez disso.
-readable
Corresponde a arquivos que são legíveis pelo usuário atual. Isso leva em consideração listas de controle de acesso e outros artefatos de permissão que o teste -perm ignora. Este teste faz uso da chamada de sistema access(2) e, portanto, pode ser enganado por servidores NFS que usam mapeamento de UID (ou supressão de root), já que muitos sistemas implementam access(2) no kernel do cliente e, portanto, não podem usar as informações de mapeamento de UID mantidas no servidor.
-regex pattern
O nome do arquivo corresponde à expressão regular pattern. Este é um correspondência no caminho inteiro, 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 compreendidas por find são, por padrão, Expressões Regulares Emacs, mas isso pode ser alterado com a opção -regextype.
-samefile name
O arquivo se refere ao mesmo inode que name. 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 de dois 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 1024 * 1024 * 1024 = 1073741824 bytes)
O tamanho é simplesmente o membro st_size da estrutura stat preenchida pela chamada de sistema lstat (ou stat), arredondado como mostrado acima. Em outras palavras, é consistente com o resultado que você obtém para ls -l. Tenha em mente que os especificadores de formato %k' e%b' de -printf tratam arquivos esparsos de forma diferente. O sufixo `b' sempre denota 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
O arquivo é do tipo c:
b bloco (especial com buffer)
c especial de caractere (sem buffer)
d diretório
p pipe nomeado (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ê quiser pesquisar links simbólicos quando -L estiver em vigor, use -xtype.
s socket
D door (Solaris)
Para pesquisar por mais de um tipo ao mesmo tempo, você pode fornecer a lista combinada de letras de tipo
separadas por uma vírgula , (extensão GNU).
-uid n O ID numérico do usuário do arquivo é menor, maior ou exatamente n.
-used n
O arquivo foi acessado pela última vez menos de, mais de ou exatamente n dias após sua data de modificação.
-user uname
O arquivo pertence ao usuário uname (ID numérico de usuário permitido).
-wholename pattern
Veja -path. Esta alternativa é menos portátil que -path.
-writable
Corresponde a arquivos que são graváveis pelo usuário atual. Isso leva em consideração as listas de controle de acesso e outros artefatos de permissão que o teste -perm ignora. Este teste usa o sistema de chamada access(2) e, portanto, pode ser enganado por servidores NFS que usam mapeamento de UID (ou supressão de root), já que muitos sistemas implementam access(2) no kernel do cliente e, portanto, não podem usar as informações de mapeamento de 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 foi
dada, verdadeiro se c for l. Em outras palavras, para links simbólicos, -xtype verifica o tipo do
arquivo para o qual o link aponta, que é o tipo que -type não verifica. Se um link simbólico estiver quebrado (porque o arquivo para o qual ele aponta não existe ou o link aponta para ele mesmo), então -xtype se comportará da mesma forma que -type.
-context pattern
(Somente SELinux) O contexto de segurança do arquivo corresponde ao padrão glob.
AÇÕES
-delete
Exclui arquivos ou diretórios; verdadeiro se a exclusão for bem-sucedida. Se a exclusão falhar, uma mensagem de erro será exibida e o status de saída do find será diferente de zero (quando ele finalmente sair).
Aviso: Não se esqueça de que o find avalia a linha de comando como uma expressão, portanto, colocar
-delete primeiro fará com que o find tente excluir tudo abaixo dos pontos de início que você especificou.
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 usada 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 real da exclusão. Para evitar resultados surpreendentes, geralmente é melhor lembrar de usar -depth explicitamente durante essas execuções de teste anteriores.
A ação -delete falhará ao excluir um diretório, a menos que ele esteja vazio.
Juntamente com a opção -ignore_readdir_race, o find ignorará os erros da ação -delete no caso em que o arquivo tenha desaparecido desde que o diretório pai foi lido: ele não exibirá uma mensagem de erro, não alterará o código de saída para diferente de zero e o código de retorno da ação -delete será verdadeiro.
-exec command ;
Executa o comando; verdadeiro se o status 0 for retornado. Todos os argumentos subsequentes para find são considerados
argumentos para o comando até que um argumento consistindo em ; seja encontrado. A
cadeia de caracteres {} é substituída pelo nome do arquivo atual que está sendo processado em todos os lugares em que ocorre nos
argumentos para o comando, e não apenas nos argumentos onde ele está sozinho, como em algumas versões
do find. Ambas essas construções podem precisar ser escapadas (com um \) ou colocadas entre aspas para
protegê-las da expansão pelo shell. Veja a seção EXEMPLOS para exemplos do 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
envolvidos no uso da ação -exec; você deve usar a opção -execdir em vez disso.
-exec command {} +
Esta variante da ação -exec executa o comando especificado nos arquivos selecionados, mas a linha de comando é construída anexando o nome de cada arquivo selecionado ao final; o número total de invocações do comando será muito menor do que o número de arquivos correspondentes. A linha de comando é construída de maneira muito semelhante à forma como o xargs constrói suas linhas de comando. Apenas uma instância de {} é permitida dentro do comando e ela deve aparecer no final, imediatamente antes de +; ela precisa ser escapada (com \) ou colocada entre aspas para protegê-la da interpretação pelo shell. O comando é executado no diretório de início. Se alguma invocação com o formulário + retornar um valor de saída diferente de zero, então o find retorna um valor de saída diferente de zero. Se o find encontrar um erro, isso às vezes pode causar uma saída imediata, então alguns comandos pendentes podem não ser executados. Por esta razão, -exec my-command ... {} + -quit pode não resultar na execução real de my-command. Esta variante de -exec sempre retorna verdadeiro.
-execdir command ;
-execdir command {} +
Semelhante a -exec, mas o comando especificado é executado a partir do subdiretório que contém o arquivo correspondente, que não é normalmente o diretório no qual você iniciou o find. Como em -exec, o {} deve ser colocado entre aspas se o find estiver sendo invocado a partir de um shell. Este é um método muito mais seguro para invocar comandos, pois evita condições de corrida durante a resolução dos caminhos para os arquivos correspondentes. Como na ação -exec, o formulário + de -execdir construirá uma linha de comando para processar mais de um arquivo correspondente, mas qualquer invocação dada de comando listará apenas arquivos que existam no mesmo subdiretório. Se você usar esta opção, deve garantir que sua variável de ambiente PATH não faça referência a .'; caso contrário, um invasor pode executar quaisquer comandos que desejar, deixando um arquivo com o nome apropriado em um diretório no qual você executará-execdir. O mesmo se aplica a ter entradas emPATHque são vazias ou que não são nomes de diretório absolutos. Se alguma invocação com o formulário+retornar um valor de saída diferente de zero, então ofindretorna um valor de saída diferente de zero. Se ofindencontrar um erro, isso às vezes pode causar uma saída imediata, então alguns comandos pendentes podem não ser executados. O resultado da ação depende se a variante+ou a variante;está sendo usada;-execdir command {} +sempre retorna verdadeiro, enquanto-execdir command {} ;` retorna verdadeiro apenas se o comando retornar 0.
-fls arquivo
Verdadeiro; semelhante a -ls, mas grava em um arquivo como -fprint. O arquivo de saída é sempre criado, mesmo que o predicado nunca seja correspondido. Veja a seção Nomes de arquivos incomuns para obter informações sobre como caracteres incomuns em nomes de arquivos são tratados.
-fprint arquivo
Verdadeiro; imprime o nome completo do arquivo no arquivo especificado. Se o arquivo não existir quando o find for executado, ele será criado; se existir, será truncado. Os nomes de arquivos /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. Veja a seção Nomes de arquivos incomuns para obter informações sobre como caracteres incomuns em nomes de arquivos são tratados.
-fprint0 arquivo
Verdadeiro; semelhante a -print0, mas grava em um arquivo como -fprint. O arquivo de saída é sempre criado, mesmo que o predicado nunca seja correspondido. Veja a seção Nomes de arquivos incomuns para obter informações sobre como caracteres incomuns em nomes de arquivos são tratados.
-fprintf arquivo formato
Verdadeiro; semelhante a -printf, mas grava em um arquivo como -fprint. O arquivo de saída é sempre criado, mesmo que o predicado nunca seja correspondido. Veja a seção Nomes de arquivos incomuns para obter informações sobre como caracteres incomuns em 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 1KB, a menos que a variável de ambiente POSIXLY_CORRECT esteja definida, caso em que blocos de 512 bytes são usados. Veja a seção Nomes de arquivos incomuns para obter informações sobre como caracteres incomuns em nomes de arquivos são tratados.
-ok comando ;
Semelhante a -exec, mas pergunta ao usuário primeiro. Se o usuário concordar, executa o comando. Caso contrário, retorna falso. Se o comando for executado, sua entrada padrão é redirecionada de /dev/null. Esta ação não pode ser especificada juntamente 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 definida ou, caso contrário, das traduções de mensagens do find. Se o sistema não tiver uma definição adequada, o find usará sua própria definição. Em ambos os 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 (intervalos de caracteres e classes de equivalência).
-okdir comando ;
Semelhante a -execdir, mas pergunta ao usuário primeiro da mesma forma que para -ok. Se o usuário não concordar, apenas retorna falso. Se o comando for executado, sua entrada padrão é redirecionada de /dev/null. Esta ação não pode ser especificada juntamente 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 direcionando a saída do find para outro programa e houver a menor possibilidade de que os arquivos que você está procurando contenham uma nova linha, então você deve considerar seriamente o uso da opção -print0 em vez de -print. Veja a seção Nomes de arquivos incomuns para obter informações sobre como caracteres incomuns em 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 contêm novas linhas ou outros tipos de espaços em branco sejam interpretados corretamente por programas que processam a saída do comando find. Esta opção corresponde à opção -0 do comando xargs.
-printf format
Verdadeiro; imprime o formato na saída padrão, interpretando sequências de escape \ e diretivas %. Larguras e precisões de campo 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 as flags não funcionam como você espera. Isso também significa que a flag - funciona (ela força os campos a serem alinhados à esquerda). Ao contrário de -print, -printf não adiciona uma nova linha no final da string. As sequências de escape e as diretivas são:
\a Sinal sonoro.
\b Retrocesso.
\c Pare de imprimir a partir deste formato imediatamente e limpe a saída.
\f Quebra de página.
\n Nova linha.
\r Retorno de carro.
\t Tabulação horizontal.
\v Tabulação vertical.
\0 Nulo ASCII.
\\ Uma barra invertida literal (`\`).
\NNN O caractere cujo código ASCII é NNN (octal).
Um caractere `'\' seguido por qualquer outro caractere é tratado como um caractere comum, então ambos são impressos.
%% Um sinal de porcentagem literal.
%a O horário do último acesso do arquivo no formato retornado pela função C ctime(3).
%Ak O horário do último acesso do arquivo no formato especificado por k, que é `@` ou uma diretiva para a função C strftime(3). O seguinte mostra uma lista incompleta de valores possíveis para k. Consulte a documentação de strftime(3) para obter 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 janeiro de 1970, 00:00 GMT, com parte fracionária.
Campos de horário:
H hora (00..23)
I hora (01..12)
k hora ( 0..23)
l hora ( 1..12)
M minuto (00..59)
p AM ou PM do idioma
r hora, 12 horas (hh:mm:ss [AP]M)
S Segundo (00.00 .. 61.00). Há uma parte fracionária.
T hora, 24 horas (hh:mm:ss.xxxxxxxxxx)
+ Data e hora, separados por `+`, por exemplo `2004-04-28+22:22:05.0`. Esta é uma extensão GNU. A hora é fornecida no fuso horário atual (que pode ser afetado pela configuração da variável de ambiente TZ). O campo de segundos inclui uma parte fracionária.
X representação de hora do idioma (H:M:S). O campo de segundos inclui uma parte fracionária.
Z fuso horário (por exemplo, EDT), ou nada se nenhum fuso horário puder ser determinado.
Campos de data:
a nome abreviado do dia da semana na configuração regional (Dom..Sáb)
A nome completo do dia da semana na configuração regional, comprimento variável (Domingo..Sábado)
b nome abreviado do mês na configuração regional (Jan..Dez)
B nome completo do mês na configuração regional, comprimento variável (Janeiro..Dezembro)
c data e hora na configuração regional (Sáb Nov 04 12:02:33 EST 1989). O formato é o mesmo de ctime(3) e, para preservar a compatibilidade com esse formato, não há parte fracionária no campo dos segundos.
d dia do mês (01..31)
D data (mm/dd/aa)
F data (aaaa-mm-dd)
h igual a b
j dia do ano (001..366)
m mês (01..12)
U número da semana do ano, com domingo como o primeiro dia da semana (00..53)
w dia da semana (0..6)
W número da semana do ano, com segunda-feira como o primeiro dia da semana (00..53)
x representação de data na configuração regional (mm/dd/aa)
y os dois últimos dígitos do ano (00..99)
Y ano (1970...)
%b A quantidade de espaço em disco usada para este 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 de criação do arquivo, ou seja, sua hora de criação, no formato especificado por k, que é o mesmo que para %A. Esta diretiva produz uma string vazia se o sistema operacional ou o sistema de arquivos subjacente não suportar horários de criação.
%c A última hora de alteração de status do arquivo no formato retornado pela função C ctime(3).
%Ck A última hora de alteração de status do arquivo no formato especificado por k, que é o mesmo que para %A.
%d A 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 de struct stat), em decimal.
%f Imprime o nome base; o nome do arquivo com todos os diretórios à esquerda removidos (apenas o último elemento). Para /, o resultado é `/'. Consulte a seção EXEMPLOS para um exemplo.
%F Tipo do sistema de arquivos no qual o arquivo está; este valor pode ser usado para -fstype.
%g O nome do grupo do arquivo ou o ID numérico do grupo, se o grupo não tiver um nome.
%G O ID numérico do grupo do arquivo.
%h Diretório; os diretórios principais do nome do arquivo (tudo, exceto o último elemento). Se o nome do arquivo não contiver barras (já que está no diretório atual), o especificador %h se expande para `.`. Para arquivos que são eles próprios diretórios e contêm uma barra (incluindo /), %h se expande para uma string vazia. Consulte a seção EXEMPLOS para um exemplo.
%H Ponto de partida sob o qual o arquivo foi encontrado.
%i O número do inode do arquivo (em decimal).
%k A quantidade de espaço em disco usada para este 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 O objeto de link simbólico (string vazia se o arquivo não for um link simbólico).
%m Os bits de permissão do arquivo (em octal). Esta opção usa os números "tradicionais" que a maioria das implementações Unix usa, mas se sua implementação específica usar uma ordem incomum de bits de permissão octal, você verá uma diferença entre o valor real do modo do arquivo e a saída de %m. Normalmente, você desejará ter um zero à esquerda neste número e, para fazer isso, deverá usar a flag # (como em, por exemplo, `%#m`).
%M Permissões do arquivo (em formato simbólico, como para ls). Esta diretiva é suportada no findutils 4.2.5 e versões posteriores.
%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 Esparsidade do arquivo. Isso é calculado como (BLOCKSIZE * st_blocks / st_size). O valor exato que você obterá para um arquivo comum de determinado tamanho é dependente do sistema. No entanto, normalmente, arquivos 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 é dependente do sistema de arquivos. O valor usado para BLOCKSIZE é dependente do sistema, mas geralmente é de 512 bytes. Se o tamanho do arquivo for zero, o valor impresso é indefinido. Em sistemas que não têm suporte para st_blocks, a esparsidade de um arquivo é considerada 1,0.
%t Hora da última modificação do arquivo no formato retornado pela função C ctime(3).
%Tk Hora 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 nome.
%U ID numérico do usuário do arquivo.
%y Tipo do arquivo (como em ls -l), U=tipo desconhecido (não deveria acontecer).
%Y Tipo do arquivo (como %y), mais seguir links simbólicos: `L'=loop, `N'=inexistente, `?' para qualquer outro erro ao determinar o tipo do destino de um link simbólico.
%Z (Somente 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 confie nisso, pois caracteres de formato adicionais podem ser introduzidos). Um caractere `%` no final do argumento de formato causa comportamento indefinido, pois não há um caractere seguinte. Em alguns locais, isso pode esconder suas chaves, enquanto em outros pode remover a página final do romance que você está lendo.
As diretivas %m e %d suportam as flags #, 0 e +. As outras diretivas não, mesmo que imprimam números. As diretivas numéricas que não suportam essas flags incluem G, U, b, D, k e n. A flag de formato `-' é suportada e altera o alinhamento de um campo da justificação à direita (que é o padrão) para a justificação à esquerda.
Veja a seção NOMES DE ARQUIVOS INCOMUNS para obter informações sobre como caracteres incomuns nos nomes dos arquivos são tratados.
-prune Verdadeiro; se o arquivo for um diretório, não desça nele. Se -depth for fornecido, então -prune não terá efeito. Como -delete implica -depth, você não pode usar -prune e -delete juntos de forma útil. Por exemplo, para pular o diretório src/emacs e todos os arquivos e diretórios abaixo dele e imprimir os nomes dos outros arquivos encontrados, faça algo como:
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 se aplica apenas ao conteúdo de diretórios podados, enquanto -quit simplesmente faz com que o find pare imediatamente. Nenhum processo filho permanecerá em execução. Quaisquer linhas de comando que foram construídas por -exec ... + ou -execdir ... + são invocadas antes que o programa seja encerrado. Após a execução de -quit, nenhum arquivo especificado na linha de comando será mais processado. Por exemplo, `find /tmp/foo /tmp/bar -print -quit` imprimirá apenas `/tmp/foo`.
Um uso comum de -quit é interromper a pesquisa no sistema de arquivos assim que encontrarmos o que queremos. Por exemplo, se quisermos encontrar apenas um único arquivo, podemos fazer o seguinte:
find / -name needle -print -quit
OPERADORES
Listados em ordem de precedência decrescente:
( expr )
Força a precedência. Como os parênteses são especiais para o shell, você normalmente precisará citá-los. Muitos dos exemplos nesta página do manual usam barras invertidas para isso: `\(...\)' em vez de `(...)'.
! expr Verdadeiro se expr for falso. Este caractere também normalmente precisará de proteção contra interpretação pelo shell.
-not expr
O mesmo que ! expr, mas não compatível com POSIX.
expr1 expr2
Duas expressões em sequência são consideradas unidas com um -a implícito; expr2 não é avaliado se expr1 for falso.
expr1 -a expr2
O mesmo que expr1 expr2.
expr1 -and expr2
O mesmo que expr1 expr2, mas não compatível com POSIX.
expr1 -o expr2
Ou; expr2 não é avaliado se expr1 for verdadeiro.
expr1 -or expr2
O mesmo que expr1 -o expr2, mas não compatível com POSIX.
expr1 , expr2
Lista; tanto expr1 quanto expr2 são sempre avaliados. O valor de expr1 é descartado; o valor da lista é o valor de expr2. O operador de vírgula pode ser útil para pesquisar vários tipos diferentes de coisas, mas percorrendo 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.
Observe que -a, quando especificado implicitamente (por exemplo, por dois testes aparecendo sem um operador explícito entre eles) ou explicitamente, tem precedência maior que -o. Isso significa que find . -name afile -o -name bfile -print nunca imprimirá afile.
NOMES DE ARQUIVOS INCOMUNS
Muitas das ações do find resultam na impressão de dados que estão sob o controle de outros usuários. Isso inclui nomes de arquivos, tamanhos, tempos de modificação e assim por diante. Os nomes de arquivos são um problema potencial, pois podem conter qualquer caractere, exceto \0' e/'. Caracteres incomuns nos nomes de arquivos podem causar coisas inesperadas e, muitas vezes, indesejáveis ao seu terminal (por exemplo, alterar as configurações das teclas de função em alguns terminais). Caracteres incomuns são tratados de maneira diferente por várias ações, conforme descrito abaixo.
-print0, -fprint0
Sempre imprime o nome do arquivo exatamente como está, sem alterações, mesmo que a saída seja para um terminal.
-ls, -fls
Caracteres incomuns são sempre escapados. Espaços em branco, barras invertidas e aspas duplas são impressos usando o estilo de escape C (por exemplo, `\f', `\"'). Outros caracteres incomuns são impressos usando um escape octal. Outros caracteres imprimíveis (para -ls e -fls, estes são os caracteres entre octal 041 e 0176) são impressos como estão.
-printf, -fprintf
Se a saída não for para um terminal, ela é impressa como está. Caso contrário, o resultado depende de qual diretiva está sendo usada. As diretivas %D, %F, %g, %G, %H, %Y e %y são expandidas para valores que não estão sob o controle dos proprietários dos arquivos e, portanto, são impressas como estão. 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 proprietários dos arquivos, mas que não podem ser usados para enviar dados arbitrários para o terminal, e, portanto, são impressas como estão. As diretivas %f, %h, %l, %p e %P são colocadas entre aspas. Essa colocação entre aspas é realizada da mesma forma que para GNU ls. Esta não é a mesma mecânica de colocação entre aspas usada para -ls e -fls. Se você puder decidir qual formato usar para a saída de find, normalmente é melhor usar `\0' como terminador do que usar uma nova linha, pois os nomes dos arquivos 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 colocados entre aspas.
-print, -fprint
A colocação entre aspas é tratada da mesma forma que para -printf e -fprintf. Se você estiver usando find em um script ou em uma situação em que os arquivos correspondentes possam ter nomes arbitrários, você deve considerar usar -print0 em vez de -print.
As ações -ok e -okdir imprimem o nome do arquivo atual como está. Isso pode mudar em uma versão futura.
CONFORMIDADE COM OS PADRÕES
Para a maior conformidade com o 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, Edição de 2016):
-H Esta opção é suportada.
-L Esta opção é suportada.
-name Esta opção é suportada, mas a conformidade com o POSIX depende da conformidade com o POSIX da função de biblioteca fnmatch(3) do sistema. A partir de findutils-4.2.2, os metacaracteres do shell (`*', `?' ou `[]', por exemplo) correspondem a um `.' inicial, porque a interpretação 126 da IEEE PASC exige isso. Esta é uma mudança em relação às versões anteriores de 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 as 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 está de acordo com os padrões `yes' e `no' selecionados, definindo a variável de ambiente LC_MESSAGES. Quando a variável de ambiente POSIXLY_CORRECT está definida, esses padrões são definidos pelo sistema para uma resposta positiva (sim) ou negativa (não). Consulte a documentação do sistema para nl_langinfo(3), em particular YESEXPR e NOEXPR. Quando POSIXLY_CORRECT não está definido, os padrões são obtidos do catálogo de mensagens do find.
-newer Suportado. Se o arquivo especificado for um link simbólico, ele sempre será seguido.
Esta é uma mudança em relação ao comportamento anterior, que usava 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 estiver definida, alguns argumentos de modo (por exemplo, +a+x) que não são válidos no POSIX são suportados para compatibilidade com versões anteriores.
Outras opções primárias As opções primárias -atime, -ctime, -depth, -exec, -group, -links, -mtime, -nogroup, -nouser, -ok, -path, -print, -prune, -size, -user e -xdev são todas suportadas.
O padrão POSIX especifica parênteses `(, \), negação \!` e os operadores lógicos AND/OR
-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.
O padrão POSIX exige que o find detecte loops:
A utilidade find deve detectar loops infinitos; ou seja, entrar em um diretório visitado anteriormente que é um ancestral do último arquivo encontrado. Quando detectar um loop infinito, o find deve escrever uma mensagem de diagnóstico no erro padrão e deve recuperar sua posição na hierarquia ou terminar.
O GNU find está em conformidade com esses requisitos. A contagem de links de diretórios que contêm entradas que são links rígidos para um ancestral geralmente será menor do que deveria ser. Isso pode significar que o GNU find às vezes otimizará a visita de um subdiretório que é realmente um link para um ancestral. Como o find não entra realmente 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 quando for apropriado. Os 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 o find encontra um loop de links simbólicos. Como nos loops que contêm links rígidos, a otimização de folha geralmente significa que o find sabe que não precisa chamar stat() ou chdir() no link simbólico, então esse diagnóstico geralmente 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 em vez disso.
A variável de ambiente POSIXLY_CORRECT não afeta o comportamento dos testes -regex ou -iregex porque esses 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 definida para um valor de string diferente de 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. Esta variável também afeta a interpretação da resposta para -ok; embora a variável LC_MESSAGES selecione o padrão real usado para interpretar a resposta para -ok, a interpretação de quaisquer expressões de colchetes no padrão será afetada por LC_COLLATE.
LC_CTYPE
Esta variável afeta o tratamento das classes de caracteres usadas em expressões regulares e também com o teste -name, se a função de biblioteca fnmatch(3) do sistema suportar isso. Esta variável também afeta a interpretação de quaisquer classes de caracteres 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 não imprimíveis quando os nomes dos arquivos são impressos; veja 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 estiver definida, isso também determina a interpretação da resposta ao prompt feito pela ação -ok.
NLSPATH
Determina o local dos catálogos de mensagens de internacionalização.
PATH Afeta os diretórios que são pesquisados para encontrar os executáveis invocados por -exec, -execdir, -ok e -okdir.
POSIXLY_CORRECT
Determina o tamanho do bloco usado por -ls e -fls. Se POSIXLY_CORRECT estiver definido, os blocos são unidades de 512 bytes. Caso contrário, são unidades de 1024 bytes.
Definir esta variável também desativa as mensagens de aviso (ou seja, implica -nowarn) por padrão, porque o POSIX exige que, além da saída para -ok, todas as mensagens impressas em stderr sejam diagnósticos e devem resultar em um status de saída diferente de zero.
Quando POSIXLY_CORRECT não estiver definido, -perm +zzz é tratado da mesma forma que -perm /zzz se +zzz não for um modo simbólico válido. Quando POSIXLY_CORRECT estiver definido, essas construções serão tratadas como um erro.
Quando POSIXLY_CORRECT estiver definido, a resposta ao prompt feito pela ação -ok é interpretada de acordo com o catálogo de mensagens do sistema, em vez de de acordo com as próprias traduções de mensagens do find.
TZ Afeta o fuso horário usado para alguns dos diretivos de formato relacionados ao tempo de -printf e -fprintf.
EXEMPLOS
Abordagem simples `find|xargs`
Encontre arquivos chamados core em ou abaixo do diretório /tmp e exclua-os.
$ find /tmp -name core -type f -print | xargs /bin/rm -f
Observe que isso funcionará incorretamente se houver nomes de arquivos contendo novas linhas, aspas simples ou duplas ou espaços.
Abordagem mais segura para `find -print0 | xargs -0`
Encontre arquivos com o nome core em ou abaixo do diretório /tmp e exclua-os, processando os nomes dos arquivos de forma que os nomes de 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 existe uma disputa entre o momento em que o find percorre a hierarquia, imprimindo os nomes dos arquivos correspondentes, e o momento em que o processo executado pelo xargs trabalha com esse arquivo.
Processando pontos de partida arbitrários
Dado que outro programa, proggy, pré-filtra e cria uma enorme lista de arquivos separados por NUL, processe-os como pontos de partida e encontre todos os arquivos regulares e vazios entre eles:
$ proggy | find -files0-from - -maxdepth 0 -type f -empty
O uso de `-files0-from -` significa ler os nomes dos pontos de partida da entrada padrão, ou seja, do pipe; e -maxdepth 0 garante que apenas essas entradas sejam examinadas sem recursão em diretórios (no caso de um dos pontos de partida ser um).
Executando um comando para cada arquivo
Execute o comando file em cada arquivo em ou abaixo do diretório atual.
$ find . -type f -exec file '{}' \;
Observe que as chaves são colocadas entre aspas simples para protegê-las da interpretação como pontuação de script shell. O ponto e vírgula também é protegido pelo uso de uma barra invertida, embora as aspas simples também pudessem ter sido usadas nesse caso.
Em muitos casos, pode-se preferir a sintaxe `-exec ... +` ou, melhor ainda, a sintaxe `-execdir ... +` por motivos de desempenho e segurança.
Percorrendo o sistema de arquivos apenas uma vez - para 2 ações diferentes
Percorra o sistema de arquivos apenas uma vez, listando arquivos e diretórios com o bit set-user-ID 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 duas primeiras linhas para instruir o shell a continuar lendo o comando na próxima linha.
Pesquisando arquivos por idade
Pesquise arquivos em seu diretório pessoal que foram modificados nas últimas vinte e quatro horas.
$ find $HOME -mtime 0
Este comando funciona desta forma porque o tempo desde que cada arquivo foi modificado pela última vez é dividido por 24 horas e qualquer resto é descartado. Isso significa que, para corresponder a -mtime 0, um arquivo terá que ter uma modificação no passado que seja inferior a 24 horas.
Pesquisando arquivos por permissões
Pesquise arquivos que são executáveis, mas não legíveis.
$ find /sbin /usr/sbin -executable \! -readable -print
Pesquise arquivos que têm permissão de leitura e gravação para seu proprietário e grupo, mas que outros usuários podem ler, mas não gravar.
$ find . -perm 664
Arquivos que correspondem a esses critérios, mas que possuem outros bits de permissão definidos (por exemplo, se alguém pode executar o arquivo), não serão correspondidos.
Pesquise arquivos que tenham permissão de leitura e gravação para seu proprietário e grupo, e que outros usuários possam ler, independentemente da presença de quaisquer bits de permissão extras (por exemplo, o bit de execução).
$ find . -perm -664
Isso corresponderá a um arquivo que tem o modo 0777, por exemplo.
Pesquise arquivos que sejam graváveis por alguém (seu proprietário ou seu grupo, ou qualquer outra pessoa).
$ find . -perm /222
Pesquise arquivos que sejam graváveis pelo seu proprietário ou pelo seu grupo.
$ find . -perm /220
$ find . -perm /u+w,g+w
$ find . -perm /u=w,g=w
Todos esses três comandos fazem a mesma coisa, mas o primeiro usa a representação octal do modo do arquivo e os outros dois usam a forma simbólica. Os arquivos não precisam ser graváveis tanto pelo proprietário quanto pelo grupo para serem correspondidos; qualquer um servirá.
Pesquise arquivos que sejam graváveis tanto pelo seu proprietário quanto pelo seu grupo.
$ find . -perm -220
$ find . -perm -g+w,u+w
Ambos esses 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 pesquisam arquivos que são legíveis para todos (-perm -444 ou -perm -a+r), têm pelo menos um bit de gravação definido (-perm /222 ou -perm /a+w) mas não são executáveis por ninguém (! -perm /111 ou ! -perm /a+x, respectivamente).
Podando - omitindo arquivos e subdiretórios
Copie o conteúdo de /source-dir para /dest-dir, mas omita arquivos e diretórios chamados .snapshot (e tudo dentro deles). Também omite arquivos ou diretórios cujo nome termina em `\~', mas não seu conteúdo.
$ cd /source-dir
$ find . -name .snapshot -prune -o \( \! -name '*~' -print0 \) \
| cpio -pmd0 /dest-dir
A construção -prune -o ( ... -print0 ) é bastante comum. A ideia aqui é que a expressão antes de -prune corresponda às coisas que devem ser podadas. No entanto, a ação -prune retorna verdadeiro, então o seguinte -o garante que o lado direito seja avaliado apenas para aqueles diretórios que não foram podados (o conteúdo dos diretórios podados nem é visitado, então seu conteúdo é irrelevante). A expressão no lado direito de -o está entre parênteses apenas para clareza. Isso enfatiza que a ação -print0 ocorre apenas para coisas que não tiveram -prune aplicado a elas. Como a condição 'and' padrão entre testes se liga mais fortemente do que -o, isso é 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 pesquisa eficiente para encontrar as raízes dos projetos:
$ find repo/ \
\( -exec test -d '{}/.svn' \; \
-or -exec test -d '{}/.git' \; \
-or -exec test -d '{}/CVS' \; \
\) -print -prune
Saída de exemplo:
repo/project1/CVS
repo/gnu/project2/.svn
repo/gnu/project3/.svn
repo/gnu/project3/src/.svn
repo/project4/.git
Neste exemplo, -prune impede a entrada desnecessária em diretórios que já foram descobertos (por exemplo, não pesquisamos project3/src porque já encontramos project3/.svn), mas garante que os diretórios irmãos (project2 e project3) sejam encontrados.
Outros exemplos úteis
Pesquise vários tipos de arquivos.
$ find /tmp -type f,d,l
Pesquise 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 à versão mais longa, porém mais portátil:
$ find /tmp \( -type f -o -type d -o -type l \)
Pesquise arquivos com o nome específico "needle" e pare imediatamente quando encontrarmos o primeiro.
$ find / -name needle -print -quit
Demonstre a interpretação dos diretivos 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]
STATUS DE SAÍDA
find retorna 0 se todos os arquivos forem processados com sucesso, maior que 0 se ocorrerem erros. Esta é uma descrição muito ampla, mas se o valor de retorno for diferente de zero, você não deve confiar na correção dos resultados de find.
Quando ocorre algum erro, find pode parar imediatamente, sem concluir todas as ações especificadas. Por exemplo, alguns pontos de partida podem não ter sido examinados ou algumas invocações de programas pendentes para -exec ... {} + ou -execdir ... {} + podem não ter sido executadas.
HISTÓRICO
Um programa find apareceu na versão 5 do Unix como parte do projeto Programmer's Workbench e foi escrito por Dick Haight. O livro A Research UNIX Reader: Annotated Excerpts from the Programmer’s Manual, 1971-1986, de Doug McIlroy, fornece alguns detalhes adicionais; você pode lê-lo online em [https://www.cs.dartmouth.edu/~doug/reader.pdf].
O find do GNU foi originalmente escrito por Eric Decker, com aprimoramentos de David MacKenzie, Jay Plett e Tim Wood. A ideia para find -print0 e xargs -0 veio de Dan Bernstein.
COMPATIBILIDADE
A partir do findutils-4.2.2, os metacaracteres de shell (`*', `?' ou `[]', por exemplo) usados em padrões de nomes de arquivos correspondem a um ponto inicial (. ), porque a interpretação 126 da IEEE POSIX exige isso.
A partir do findutils-4.3.3, -perm /000 agora corresponde a todos os arquivos em vez de nenhum.
Timestamps de resolução de nanossegundos foram implementados no findutils-4.3.3.
A partir do findutils-4.3.11, a ação -delete define o status de saída de find como um valor diferente de zero quando falha. No entanto, find não sairá 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 +MODE foi removida no findutils-4.5.12, em favor de -perm /MODE. A sintaxe +MODE foi descontinuada desde a versão findutils-4.2.21, lançada em 2005.
NÃO SÃO BUGS
Surpresas na precedência de operadores
O comando find . -name afile -o -name bfile -print nunca imprimirá afile, pois é equivalente a find . -name afile -o ( -name bfile -a -print ). Lembre-se que a precedência de -a é maior do que a de -o e, quando nenhum operador é especificado entre os testes, -a é assumido.
"mensagem de erro 'os caminhos devem preceder a expressão'" $ find . -name *.c -print find: os caminhos devem preceder a expressão find: possível padrão não citado 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 para o comando find como: find . -name frcode.c locate.c word_io.c -print Esse comando, é claro, não funcionará, porque o predicado -name permite exatamente apenas um padrão como argumento. Em vez de fazer isso, você deve colocar o padrão entre aspas ou escapar o curinga, permitindo assim que o find use o padrão com o curinga durante a pesquisa do nome do arquivo correspondente, em vez de os nomes de arquivo expandidos pelo shell pai: $ find . -name '*.c' -print $ find . -name *.c -print
BUGS
Existem problemas de segurança inerentes ao comportamento que o padrão POSIX especifica para o find, que, portanto, não podem ser corrigidos. Por exemplo, a ação -exec é inerentemente insegura, e -execdir deve ser usada em vez disso.
A variável de ambiente LC_COLLATE não tem efeito na ação -ok.
RELATANDO BUGS
Ajuda online do GNU findutils: [https://www.gnu.org/software/findutils/#get-help] Relate quaisquer bugs de tradução para [https://translationproject.org/team/]
Relate qualquer outro problema 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–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Á GARANTIA, na medida permitida por 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 através de: info find