Что записать вместо \x20 в пути в Bash?

У меня есть внешний жесткий диск, названный "Моя Книга". Когда я использовал команду:

find /dev/disk/

это показывает мне, что находится под

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

Однако, когда я ввожу

find /dev/disk/ | grep My\x20Book

Это просто дает мне ошибку

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

Я попробовал следующее без успеха:

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

Что корректный путь состоит в том, чтобы ввести этот специальный символ в путь в Bash?

0
задан 9 March 2016 в 21:58

1 ответ

Если путь My\x20Book с обратной косой чертой, попыткой к grep это должно будет выйти из обратной косой черты оба из grep, и от bash, и это может быть сделано при помощи обратных косых черт дважды для каждого уровня:

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

Оболочка уменьшает каждого \\ кому: \, так grep получает My\\x20Book, и затем grep уменьшает \\ кому: \, так, чтобы это наконец соответствовало просто My\x20Book.

Для защиты от оболочки можно заключить обратную косую черту в кавычки и устранить внешний набор обратных косых черт:

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

Защищать от grep, можно сказать, что это использует починенные строки и не регулярные выражения, и теперь использует просто единственную обратную косую черту:

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

Между прочим, так как Вы используете find, можно просто использовать его способность к фильтрации непосредственно:

$ touch 'My\x20Book'
$ find . -name 'My\\x20Book'
./My\x20Book
4
ответ дан 29 September 2019 в 10:26

Другие вопросы по тегам:

Похожие вопросы: