Como excluir diretórios com espaços em branco através do PRUNEPATHS do locate?

5

Eu gostaria de excluir algumas pastas do Windows em uma montagem NTFS de serem indexadas por locate . Estou familiarizado com a sintaxe PRUNEPATHS em /etc/updatedb.conf . É uma lista separada por espaços em branco de nomes de diretórios.

Meu problema é que desejo excluir diretórios que contêm espaços em branco (por exemplo, Program Files (x86) ).

Eu tentei escapes de barra invertida, mas isso não funcionou.

    
por lmichelbacher 17.10.2011 / 09:58

1 resposta

4

Em updatedb.sh linha 175 dá uma dica:

PRUNEREGEX='echo $PRUNEPATHS|sed -e 's,^,\\(^,' -e 's, ,$\\)\\|\\(^,g' -e 's,$,$\\),''

O $PRUNEPATHS é tratado como texto simples, os caracteres '' são substituídos e não é possível escapar.

Para garantir que o espaço sobreviva à linha 175, você deve indicá-lo sem explicitamente mencioná-lo. A melhor maneira que eu sei é usar \s , que significa um caractere de espaço em branco:

PRUNEPATHS='/path/to/Program\sFiles\s(x86)'

(Isso também incluirá os caracteres tab e newline, mas neste caso será bom para você.)

Outra maneira é definir $PRUNEREGEX diretamente, como updatedb faria na linha 175:

PRUNEREGEX='\(^/path/to/Program Files (x86)$\)'

Lá você separa vários caminhos com \| , então o espaço não é mais um problema:

PRUNEREGEX='\(^/path/to/Program Files (x86)$\)\|\(^/foo/bar$\)'
    
por 17.10.2011 / 16:38