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.

JJ Beck
fonte

Respostas:

195

Use o comando find ,

find . -type f -name "*John*"
Rich Adams
fonte
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]\)'
tink
fonte
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

Thucnguyen
fonte
1

usar ack é simples. apenas digiteack <string to be searched>

Annu
fonte
Parece que isso também incluirá todos os caminhos que contêm o texto da pesquisa, não apenas os arquivos: stackoverflow.com/questions/7698867/…
underscore_d
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
Caylus
fonte