Por Que o find
Não Retorna os Resultados Esperados? Aqui Está Como Corrigir
Se você já executou o comando find
em seu sistema baseado em Unix, pode ter encontrado uma situação frustrante em que o comando falha em localizar arquivos que você sabe que estão presentes. Por exemplo, você pode querer buscar arquivos de script de shell e, apesar de ter certeza de que eles existem, a saída está vazia. Este problema comum muitas vezes surge de mal-entendidos sobre como o comando find
interpreta caracteres coringa. Vamos analisar o problema e descobrir as soluções que podem colocar sua busca de volta nos trilhos.
O Problema: find
Não Funcionando Como Esperado
Considere este comando que você pode ter tentado:
$ find /usr -name *.sh
Este comando é destinado a buscar todos os arquivos com a extensão .sh
no diretório /usr
. No entanto, se você constatar que nenhum resultado aparece, pode se perguntar: Por que o find
não está funcionando?
Você sabe que os scripts estão lá; por exemplo, quando você executa:
$ ls /usr/local/lib/*.sh
Você pode ver arquivos como tclConfig.sh
e tkConfig.sh
. Então, o que está dando errado com seu comando find
?
Compreendendo o Problema
A principal questão em jogo é como o shell do comando interpreta o caractere coringa *.sh
. Especificamente, se houver arquivos em seu diretório atual que correspondam a *.sh
, o shell expande esse caractere coringa antes que find
tenha a chance de agir. Isso pode levar a comportamentos inesperados:
-
Expansão de Coringa
- Se arquivos
.sh
existirem em seu diretório atual, por exemplo,tkConfig.sh
, digitarfind /usr -name *.sh
fará com que ele seja expandido parafind /usr -name tkConfig.sh
, limitando efetivamente sua busca apenas a esse arquivo.
- Se arquivos
-
Erros de Sintaxe
- Se vários arquivos correspondem,
find
pode gerar um erro de sintaxe devido a argumentos ambíguos:find: bad option tkConfig.sh
- Se vários arquivos correspondem,
Solução 1: Colocando o Coringa entre Aspas
Para evitar que o shell expanda o caractere coringa antes de passá-lo para find
, você pode colocar o caractere coringa entre aspas:
- Use aspas duplas:
$ find /usr -name "*.sh"
- Ou use aspas simples:
$ find /usr -name '*.sh'
Colocando *.sh
entre aspas, você está instruindo o shell a passar aquele argumento como está para find
, permitindo assim que ele procure todos os arquivos .sh
no diretório especificado.
Solução 2: Seguindo Links Simbólicos
Outra razão potencial pela qual o find
pode não funcionar como esperado é a presença de links simbólicos no diretório /usr
ou seus subdiretórios. Por padrão, o find
não segue links simbólicos. Se você suspeitar que este seja o caso, pode usar a opção -follow
:
$ find /usr -follow -name '*.sh'
Este comando permite que o find
percorra links simbólicos e busque os arquivos desejados.
Conclusão
Em resumo, se você descobrir que o comando find
não está produzindo os resultados esperados ao buscar scripts de shell, é provável que seja devido à expansão de coringas ou à presença de links simbólicos. Sempre lembre-se de colocar seus coringas entre aspas para evitar expansões prematuras e, se necessário, use a opção -follow
. Ao empregar essas estratégias, você pode localizar seus scripts de shell com sucesso e aprimorar sua proficiência na linha de comando!
Boas Pesquisas!
Agora você está pronto para enfrentar o comando find
com confiança! Se você tiver alguma dúvida ou questões adicionais, sinta-se à vontade para deixá-las nos comentários abaixo.