Por que o grep às vezes retorna diretórios com duas barras?

4

Acabei de executar grep -ri foo someDir/

Voltei

someDir//foo/bar/baz: onDelete() {

A barra dupla significa que tudo à sua esquerda estava no argumento dir que você forneceu ao grep?

    
por meetalexjohnson 09.06.2016 / 19:30

1 resposta

5

Quando você executa o comando:

grep -r <pattern> <directory>

imprime todos os nomes dos arquivos como <directory>/<filename> . Se você colocar uma barra no final de <directory> , ela será incluída, então você acaba com uma barra dupla.

O código poderia ter sido inteligente o suficiente para perceber quando o nome do diretório original termina com / e omiti-lo ao imprimir nomes de arquivos, mas eles não se incomodaram. Eu acho que o único caso especial que faz é para o diretório raiz, por exemplo,

grep -r pattern /

imprime /foo/bar/baz em vez de //foo/bar/baz . Isso ocorre porque o POSIX especifica que uma sequência de barras é tratada de forma equivalente a uma única barra exceto que duas barras no início têm significado dependente da implementação (isso ocorre porque alguns mecanismos do sistema de arquivos de rede usavam sintaxe como %código%). Veja Como o Linux lida com vários separadores de caminhos consecutivos ( / home //// username /// file)?

    
por 09.06.2016 / 21:17

Tags