在 Bash 的路径名中用什么来代替 \x20?

在 Bash 的路径名中用什么来代替 \x20?

我有一个名为“My Book”的外部硬盘。当我使用以下命令时:

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 中的路径名中输入此特殊字符的正确方法是什么?

答案1

如果路径My\x20Book带有反斜杠,则尝试对其进行grep转义必须从grep和 从转义反斜杠bash,这可以通过在每个级别使用两次反斜杠来完成:

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

shell 将每个字符简化\\\,因此grep接收My\\x20Book,然后 grep 将其简化\\\,以便最终匹配My\x20Book

为了防止 shell 攻击,您可以引用反斜杠,并消除外面的反斜杠集:

$ 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

相关内容