我构建了自己的locatedb
使用frcode
,因此它将在路径之后包含文件大小(它可以帮助我快速查找大文件)。我存储的路径与大小之间用制表符分隔。我注意到,如果我在命令行中使用locate,我会?
在选项卡应该在的位置出现一个(问号),除非我把它输送到 cat
,这很奇怪。有人知道这是为什么吗?
$ mkdir test-locatedb && cd test-locatedb
$ touch a b c d e f g
$ du -a | awk -v 'OFS=\t' '{print $2,$1}' | /path/to/frcode > test.locatedb
$ locate --database=test.locatedb a
./test.locatedb?1
./a?1
$ locate --database=test.locatedb a | cat
./a 1
./test.locatedb 1
$ /usr/lib/locate/frcode -v
frcode (GNU findutils) 4.4.2
...
答案1
我怀疑这是locate
通过检查输出是否存在来编码的stdout
。事实上,locate
当输出是 tty 时,有一个条件用问号替换不可打印的字符(请参阅printquoted.c
和qmark.c
)。它也认为 ASCII 控制字符范围内的空白是不可打印的。我认为这是不幸的,因为人们不会期望终端的输出在通过管道传输时发生变化cat
。这对于findutils
4.6.0 也是如此。我提交了一份错误报告。