Onde o padrão ocorre em uma correspondência por find?

5

A página de manual de find diz:

-name

Base of file name (the path with the leading directories removed)

$ find ~ -name bookmark | less

não retorna nada, enquanto

$ find ~ -name bookmarks | less
./.streamtuner/cache/bookmarks
./.config/zathura/bookmarks
./.elinks/bookmarks

tem três correspondências.

Por que o primeiro não tem as correspondências do segundo?

Se eu quiser encontrar os arquivos cujos nomes contenham bookmark , independentemente da posição de bookmark no nome do arquivo, como devo usar find ? Obrigado.

    
por Tim 27.07.2014 / 07:31

2 respostas

8

O padrão dado a -name precisa corresponder ao inteiro nome de arquivo base . O comportamento do padrão -name é definido como:

The primary shall evaluate as true if the basename of the current pathname matches pattern

Isso é verdadeiro quando o nome da base corresponde ao padrão que você deu . Você pode pensar em um padrão basicamente como um shell glob: você pode usar os padrões * , ? e [...] dentro dele, com o início e o fim do padrão alinhados com o início e o final da sequência .

Então, seu comando:

find ~ -name bookmarks

localiza arquivos com o nome "bookmarks" porque esse é o nome do arquivo inteiro, mas:

find ~ -name bookmark

só encontraria arquivos com o nome 'bookmark', porque não há caracteres curinga no padrão.

Para corresponder aos arquivos chamados bookmark e bookmarks , você pode usar:

find ~ -name 'bookmark*'

Então, se você quiser encontrar

those files whose names contain bookmark regardless the position of bookmark in the filename

você pode usar:

find ~ -name '*bookmark*'

para corresponder arquivos cujos nomes tenham qualquer número de caracteres e, em seguida, bookmark e, em seguida, qualquer número de caracteres.

    
por 27.07.2014 / 07:37
1

O argumento do parâmetro -name no comando find funciona exatamente como caracteres curinga nos nomes de arquivos / diretórios na linha de comando. * é qualquer string e? é qualquer personagem.

    
por 27.07.2014 / 15:08

Tags