Linux encontra nomes de arquivos com a string fornecida


107

Estou no Ubuntu e gostaria de encontrar todos os arquivos no diretório e subdiretórios atuais cujo nome contém a string "John". Sei que greppode corresponder ao conteúdo dos arquivos, mas não tenho ideia de como usá-lo com nomes de arquivo. Qualquer ajuda seria apreciada.


Respostas:


195

Use o comando find ,

find . -type f -name "*John*"

1
A criação de um script bash personalizado com #!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi deixaria você funcionar F search-stringcomo um atalho perfeito
— Ilia Rostovtsev

@IliaRostovtsev - legal, mas [ -z "$1" ]seria um pouco melhor.
— Joe,

@Joe Ah, certo. Quer dizer no caso de um caminho ter espaços? Mas aqui apenas verificamos a existência de $ 1, o espaço faria $ 2 aparecer e é isso. Quer dizer que é teoricamente melhor, certo?
— Ilia Rostovtsev

@IliaRostovtsev - Na verdade, eu estava errado. Se $ 1 for nulo, o teste se torna if [ -z ]. Achei que seria um erro de sintaxe, mas funciona. Posso simplificar parte do meu código de agora em diante.
— Joe,

25

Uma resposta correta já foi fornecida, mas para você aprender como se ajudar, pensei em acrescentar algo útil de uma maneira diferente; se você puder resumir o que está tentando alcançar em uma palavra, há um excelente recurso de ajuda no Linux.

man -k <your search term>

O que isso faz é listar todos os comandos que têm o seu termo de pesquisa na breve descrição. Geralmente há uma boa chance de que você encontrar o que procura . ;)

Essa saída às vezes pode ser um tanto opressiva, e eu recomendo restringi-la aos executáveis, em vez de todas as páginas de manual disponíveis, como:

man -k find | egrep '\(1\)'

ou, se você também deseja procurar comandos que requerem níveis de privilégio mais altos, como este:

man -k find | egrep '\([18]\)'

3
Estou curioso ... uma pergunta que não mostra nenhuma tentativa de resolver o problema em mãos por meio de uma pesquisa obtém uma votação favorável, uma explicação amigável de como descobrir sobre possíveis comandos é pisada. Quais são os critérios? :)
— pense em

1
eu votei positivamente em você. lição é poucos pode manejá-lo. mas podemos ver exemplos e adaptar :)
— tgkprog

2

O findcomando vai demorar muito porque verifica arquivos reais no sistema de arquivos.

A maneira mais rápida é usar o locatecomando, que dará resultado imediatamente:

locate "John"

Se o comando não for encontrado, você precisa instalar o mlocatepacote e executar o updatedbcomando primeiro para preparar o banco de dados de pesquisa pela primeira vez.

Mais detalhes aqui: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab



1

Esta é uma solução muito simples usando o treecomando no diretório que você deseja pesquisar. -fmostra o caminho completo do arquivo e |é usado para canalizar a saída da árvore greppara encontrar o arquivo que contém a string filenameno nome.

tree -f | grep filename
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.