Como encontrar arquivos cujos nomes contenham alguma de duas cadeias?

1

Gostaria de encontrar arquivos cujo nome contenha "Mar" ou "Jun". Como posso fazer isso?

    
por alwbtc 01.02.2013 / 13:20

3 respostas

6

Sua primeira abordagem ( find . -type f -name "Mar" -name "Jun" ) teve dois problemas:

  • find combina regras diferentes usando um "e" lógico por padrão
  • Você fez uma correspondência exata de nome

Assim, as únicas correspondências possíveis foram arquivos que foram nomeadas exatamente "Jun" e

Em vez disso, faça o seguinte:

  • Você pode usar caracteres curinga na pesquisa de nome ( * significa qualquer sequência de caracteres possivelmente vazia), envolto em aspas para impedir a interpretação pelo shell
  • combine as duas regras com -o ( ou ) - isso exige que você envolva as regras alternativas entre parênteses para substituir a precedência do operador usual ou para repetir a regra comum -type f

Exemplo:

$ ls -1
1st-of-June
January
March
$ find . -type f -name '*Mar*' -o -type f -name '*Jun*'
./1st-of-June
./March
    
por 01.02.2013 / 14:31
3

Use find e sua opção regex :

find -regex '.*\(Mar\|Jun\).*'
    
por 01.02.2013 / 13:25
0

Este comando funcionará

[max@localhost ~]$ find / -type f -name Mar -o -name Jun
./Mar
./Jun

UPDATE

Então esta é a resposta

find / -type f -name "*Mar*" -o -type f -name "*Jun*"
    
por 01.02.2013 / 13:35

Tags