use*_*764 1 command-line unicode paths filename
我有一个名为“My Book”的外置硬盘。当我使用命令时:
find /dev/disk/
Run Code Online (Sandbox Code Playgroud)
它告诉我它在
/dev/disk/by-label/My\x20Book
Run Code Online (Sandbox Code Playgroud)
但是,当我输入
find /dev/disk/ | grep My\x20Book
Run Code Online (Sandbox Code Playgroud)
它只是给了我错误
find: `/dev/disk/by-label/Myx20Book': No such file or directory
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法但没有成功:
find /dev/disk/ | grep My\x20Book
find /dev/disk/ | grep My' 'Book
find /dev/disk/ | grep "My Book"
find /dev/disk/ | grep My\ Book
Run Code Online (Sandbox Code Playgroud)
在 Bash 的路径名中输入这个特殊字符的正确方法是什么?
如果路径My\x20Book带有反斜杠,则必须尝试grep从grep和 from转义反斜杠bash,这可以通过对每个级别使用两次反斜杠来完成:
$ echo 'My\x20Book' | grep My\\\\x20Book
My\x20Book
Run Code Online (Sandbox Code Playgroud)
shell 将每个都减少\\到\,因此grep接收My\\x20Book,然后 grep 减少\\到\,以便它最终匹配 just My\x20Book。
为了保护不受外壳的影响,您可以引用反斜杠,并消除外部反斜杠:
$ echo 'My\x20Book' | grep 'My\\x20Book'
My\x20Book
Run Code Online (Sandbox Code Playgroud)
为了防止grep,您可以告诉它使用固定字符串而不是正则表达式,现在只使用一个反斜杠:
$ echo 'My\x20Book' | grep -F 'My\x20Book'
My\x20Book
Run Code Online (Sandbox Code Playgroud)
顺便说一句,由于您正在使用find,您可以直接使用其过滤功能:
$ touch 'My\x20Book'
$ find . -name 'My\\x20Book'
./My\x20Book
Run Code Online (Sandbox Code Playgroud)