O que é uma maneira segura de encontrar todos os arquivos e / ou caminho que contenham 2 palavras-chave?

1

Eu estava fazendo um

find . -iname '*sitesearch*' | grep demo

porque eu sei que o arquivo deve ser some/path/SiteSearch/demo/SiteSearch.html , mas a pessoa colocou o arquivo como some/path/SiteSearch/demo/index.html , então o arquivo não pode ser encontrado.

Existe uma maneira melhor de fazer a pesquisa?

Como para este caso, se eu fizer

find . -iname '*demo*' | grep -i sitesearch

teria encontrado. Mas eu não quero sempre pensar na possibilidade e descobrir qual padrão usar. Eu só quero uma maneira que sempre que o arquivo e o caminho tiverem essas duas palavras-chave e, em seguida, imprimi-las. Por exemplo, se houver uma maneira de ls , todos os arquivos terão o caminho completo em cada linha, então podemos fazer

ls --some-flags | grep -i demo | grep -i sitesearch

ou talvez de outra maneira / melhor maneira.

    
por 太極者無極而生 06.04.2013 / 01:27

1 resposta

6

Você pode combinar dois padrões (ou, mais geralmente, vários critérios) em find .

find . -ipath '*sitesearch*' -ipath '*demo*'

ou se você preferir sintaxe de regex

find . -iregex '.*sitesearch.*' -iregex '.*demo.*'

" ls com o caminho completo em cada linha" (além de percorrer diretórios recursivamente, o que é evidentemente necessário aqui) seria find . Embora você possa executar find | grep -i demo | grep -i sitesearch , fazer tudo com find provavelmente será visivelmente mais rápido.

Se você fizer isso muito, pode torná-lo uma função (coloque-o em ~/.kshrc ou ~/.bashrc ou ~/.zshrc ):

findallof () {
  typeset -a pred
  pred=(.)
  typeset x
  for x do
    pred=("${pred[@]}" -ipath "*$x*")
  done
  find "${pred[@]}"
}

Note também que você pode procurar arquivos pelo nome com locate (verifique a página do manual em seu sistema como existem várias implementações, mesmo no Linux).

locate -i sitesearch | grep -i demo

Isso pode ser mais rápido do que procurar em uma árvore de diretórios grande, porque locate consulta um índice (embora as pesquisas não diferenciam maiúsculas de minúsculas tendem a não ser tão rápidas). No entanto, o índice é normalmente reconstruído apenas todas as noites, portanto, ele não mostrará arquivos criados hoje. Arquivos que não estão em um diretório legível publicamente podem ou não ser indexados dependendo da implementação (verifique se /usr/bin/locate é um binário raiz setuid: se estiver, arquivos privados são indexados e o comando locate mostra apenas os arquivos você pode acessar).

    
por 06.04.2013 / 01:37

Tags