O que escrever em vez de \ x20 no nome do caminho no Bash?

0

Eu tenho um disco rígido externo chamado "My Book". Quando usei o comando:

find /dev/disk/

me mostra que está sob

/dev/disk/by-label/My\x20Book

No entanto, quando eu digito

find /dev/disk/ | grep My\x20Book

Isso só me dá o erro

find: '/dev/disk/by-label/Myx20Book': No such file or directory

Eu tentei o seguinte sem sucesso:

find /dev/disk/ | grep My\x20Book
find /dev/disk/ | grep My' 'Book
find /dev/disk/ | grep "My Book"
find /dev/disk/ | grep My\ Book

Qual é a maneira correta de inserir esse caractere especial em um nome de caminho no Bash?

    
por user2669764 09.03.2016 / 19:36

1 resposta

4

Se o caminho for My\x20Book com a barra invertida, uma tentativa de grep terá que escapar da contrabarra de grep e de bash , e isso pode ser feito usando barras invertidas duas vezes para cada nível:

$ echo 'My\x20Book' | grep My\\x20Book
My\x20Book

O shell reduz cada \ para \ , então grep recebe My\x20Book e, em seguida, o grep reduz \ para \ , para que finalmente corresponda apenas a My\x20Book .

Para proteger do shell, você pode citar a barra invertida e eliminar o conjunto externo de barras invertidas:

$ echo 'My\x20Book' | grep 'My\x20Book'
My\x20Book

Para proteger de grep , você pode dizer que use strings fixas e não expressões regulares e agora use apenas uma única barra invertida:

$ echo 'My\x20Book' | grep -F 'My\x20Book'
My\x20Book

A propósito, como você está usando find , pode usar apenas a capacidade de filtragem diretamente:

$ touch 'My\x20Book'
$ find . -name 'My\x20Book'
./My\x20Book
    
por muru 09.03.2016 / 20:05