Como procurar nomes de diretórios recursivamente no Linux

0
18


Tudo no Linux é armazenado em diretórios e, ao escrever scripts bash, geralmente é útil procurar diretórios por nome. Felizmente, você pode usar o find Comando para pesquisar recursivamente nomes de diretórios e exibir correspondências.

Pesquisa de diretório

a find O comando é usado para pesquisar diretórios no Linux. Por padrão, ele é totalmente recursivo, portanto, ele pesquisará todos os subdiretórios por correspondências.

Se você usar o -type d bandeira, find operará no “modo de diretório” e procurará apenas diretórios, não correspondendo a nenhum arquivo. você pode usá-lo juntos -name para procurar diretórios por nome:

find . -type d -name "search"

Este comando inicia no diretório atual, mas você também pode pesquisar em outros diretórios como ~.

O problema do uso -name é que ele corresponderá apenas a nomes diretos, o que significa que falhará, a menos que corresponda ao nome completo do diretório. No entanto, você pode usar curingas para resolver isso, e colocar um curinga antes e depois da string de pesquisa corresponderá à substring em qualquer lugar no nome do diretório. Se você também incluir nomes de arquivos, poderá usar curingas para corresponder a arquivos que terminam em uma extensão específica

find . -type d -name "*search*"

No entanto, isso corresponderá apenas ao nome do diretório e ainda ignorará o diretório pai. Se você quiser fazer a correspondência usando o caminho completo do arquivo, precisará usar a opção Regex descrita abaixo.

find imprimirá uma lista de todos os diretórios correspondentes, mas você deve ter cuidado para ter certeza de que está consistente ao usar caminhos absolutos ou relativos, pois isso afetará a resposta final. Se você usar um caminho relativo, como o ponto para “diretório atual”, as respostas serão relativas. Mas se você especificar o caminho diretamente, mesmo que seja o diretório atual, o caminho será absoluto, começando na raiz.

find Ele também faz mais do que apenas pesquisar texto: pode ser usado para corresponder arquivos com base em carimbos de data/hora, tamanhos de arquivo e outros identificadores do Linux. Também pode ser usado com -exec para executar comandos em cada arquivo ou diretório.

RELACIONADO: Como usar o comando de pesquisa no Linux

Pesquisando com Regex

Você também pode usar uma filtragem mais avançada com findusando-o com expressões regulares (Regex) para encontrar correspondências para consultas de pesquisa complexas.

Um benefício importante de usar o Regex é que ele corresponderá a todo o diretório, incluindo os diretórios básicos que levam a.

Você pode usar Regex com -regex ao invés de -name. Também ajuda a iluminar sedRegex suportado usando -regextype sed.

achar. -type d -regextype sed -regex “.* um/.*”

Neste exemplo, a expressão regular começa com .*one para corresponder a todos os diretórios que terminam em “um”. O ponto e o curinga corresponderão a qualquer substring que leve a isso. Então a barra é escapada com / para corresponder ao final do diretório e, em seguida, outro curinga para corresponder a qualquer nome de diretório.

Em geral, isso corresponderá a qualquer diretório cujo pai termine com “um”, em qualquer lugar, mesmo em subdiretórios. O Regex é poderoso e você deve ter cuidado para que o seu corresponda exatamente ao que você deseja que ele faça, nem mais, nem menos.

Usando grep com find

Já que find também pode gerar uma lista bruta de diretórios, pode ser canalizada para outros comandos para processamento. Por exemplo, grep ele é usado como um utilitário de pesquisa de texto e é usado rapidamente na linha de comando para pesquisa e realce simples.

find . -type d | grep foo

grep também é um utilitário de pesquisa completo por si só e pode ser usado com ferramentas como expressões regulares para aprimorar a pesquisa. Você pode ler nosso guia para usá-lo para obter mais informações.

RELACIONADO: Como usar o comando grep no Linux