我做了一个
cd /folder/ && find . -not \( -path ./exclude_folder -prune \) > /log.log
并得到
find: â<80><98>./qs/www/ergebnisse/validitaet/0df21b8a-e227-47b2-aaa5-9f54d1f9b8fd.txtâ<80><99>: No such file or directory
内部日志文件。没错,但是:
这是什么â<80><98>
(和â<80><99>
)?这些是颜色代码吗?如何避免它们(find
没有--no-color
)?
坚持,稍等。当我这样做cat log.log
而不是vi log.log
我得到:
find: ‘./qs/www/ergebnisse/validitaet/0df21b8a-e227-47b2-aaa5-9f54d1f9b8fd.txt’: No such file or directory
答案1
您的发行版使用 UTF-8 字符编码。这对于大多数当前的发行版来说是正常的。
您看到的是 UTF-8 编码字符显示为另一种编码的效果。
许多 GNU 实用程序尝试使用不同的引号来表示开始和结束引号。对于某些字体来说,这看起来不错,而对于其他字体来说则不太好。
让我们看看产生的输出find
:
$ find /x 2>&1 | hexdump -C
00000000 66 69 6e 64 3a 20 e2 80 98 2f 78 e2 80 99 3a 20 |find: .../x...: |
在 之前和之后/x
我们有序列e2 80 98
和e2 80 99
。
您的控制台已配置为 UTF-8,并且能够正确显示 UTF-8 序列。程序cat
不识别也不关心这个序列,所以没关系。
另一方面,您vi
将该文件解释为 latin1。这至少在现代发行版中是不寻常的。在 latin1 中,第一个字节e2
被解释为â
while 80
,在 latin1 中无效并显示为 ,依此98
类推。这导致和。99
<80>
â<80><98>
â<80><99>
如何避免这种情况?您可以将文件配置vi
为以 UTF-8 显示文件,也可以在输出中避免使用 UTF-8 序列。
$ LC_CTYPE=C find /x 2>&1 | hexdump -C
00000000 66 69 6e 64 3a 20 27 2f 78 27 3a 20 |find: '/x': |
这里find
不生成 UTF-8 序列,而是使用单引号'
作为左引号和右引号。
请注意,禁用 UTF8 可能会改变程序处理其输入的方式,尽管在您的示例中这并不重要。
答案2
这是开始和结束的代码。
â<80><98> = ‘
â<80><99> = ’