como procurar maiúsculas e minúsculas (com curinga '*') com 'find'?

2

O principal problema é que meu diretório tem muitos arquivos com letras maiúsculas (por exemplo, Foobar.txt , FooBar.txt , even FOOBAR.txt ) . E acho confuso encontrar os arquivos digitando exatamente (se eu souber os nomes exatos dos arquivos, por que usaria find ?) . Então, eu quero digitar apenas foobar e quero todos os três arquivos no resultado

Além disso, estou usando * do lado da minha string para corresponder a qualquer número de caracteres anteriores e anexados no nome do arquivo.

Eu quero um apelido ou função que faça isso.

    
por Santosh Kumar 27.08.2012 / 07:45

2 respostas

12

A maneira correta seria então

find -iname \*foobar\*

Em que -iname é para pesquisa sem distinção entre maiúsculas e minúsculas e o \ para escapar do curinga * .

A função parece um pouco desnecessária para este caso, mas é fácil escrever

function lazyfind ()
{
    find -iname \*$1\*
}
    
por 27.08.2012 / 07:53
0

Se o sistema operacional não tiver a opção GNU find -iname, aqui está uma maneira portátil de conseguir o mesmo:

cifind()
{
  pattern=""
  l=${#1}
  i=1
  while [ $i -le $l ] ; do
    lc=$(echo "$1" | cut -c $i-$i | tr '[A-Z]' '[a-z]')
    uc=$(echo "$lc" | tr '[a-z]' '[A-Z]')
    if [ ."$lc" != ."$uc" ] ; then
      pattern="${pattern}[$lc$uc]"
    else
      pattern="${pattern}$lc"
    fi
    i=$((i + 1))
  done
  find . -name "*$pattern*"
}
    
por 27.08.2012 / 08:58

Tags