Localiza o arquivo cujo nome contém substrings dadas simultaneamente

1

Em geral, geralmente é necessário encontrar um arquivo cujo nome contenha vários substrings simultaneamente. Como faço isso com o bash?

Por exemplo, "boost", "qt" e "linux" em um arquivo chamado "Como link boost com qt em linux.htm"

P.S Finalmente, consegui encontrar o arquivo usando:

find . -name *boost* | xargs find . -name *Qt*

mas primeiro é apresentada esta queixa:

xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option
find: paths must precede expression

Então, ainda estou procurando uma solução mais clara.

P.S A solução de Stéphane Chazelas ajudou. O problema era com a letra grande "b" em "boost", então eu deveria ter feito isso não diferenciar maiúsculas de minúsculas:

find . -iname '*boost*' -iname '*qt*'
    
por alxprogger 09.06.2015 / 11:31

2 respostas

2
find /some/path -name '*boost*' -name '*Qt*'

Ou para corresponder ao caminho completo:

find /some/path -path '*boost*' -path '*Qt*'

Se você não citar esses padrões, eles serão expandidos primeiro pelo seu shell.

Para a correspondência insensível a maiúsculas e minúsculas, algumas implementações find têm -iname / -ipath . Caso contrário, você sempre pode fazer:

find /some/path -name '*[bB][oO][oO][sS][tT]*' -name '*[qQ][tT]*'

Ou, supondo que os caminhos de arquivo não contenham caracteres de nova linha:

find /some/path |
  awk -F/ '{lname=tolower($NF)}; lname ~ /boost/ && lname ~ /qt/'
    
por 09.06.2015 / 13:18
1

Use find /some/path -name "*boost*" -a -name "*qt*" etc.

O -a significa "e" para localizar.

    
por 09.06.2015 / 11:48

Tags