我有一个名为“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