![locatedb에 특정 문자(탭)가 포함되어 있으면 출력이 파이프되지 않는 한 검색 결과에 물음표가 표시됩니다.](https://linux55.com/image/94904/locatedb%EC%97%90%20%ED%8A%B9%EC%A0%95%20%EB%AC%B8%EC%9E%90(%ED%83%AD)%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%98%EC%96%B4%20%EC%9E%88%EC%9C%BC%EB%A9%B4%20%EC%B6%9C%EB%A0%A5%EC%9D%B4%20%ED%8C%8C%EC%9D%B4%ED%94%84%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%ED%95%9C%20%EA%B2%80%EC%83%89%20%EA%B2%B0%EA%B3%BC%EC%97%90%20%EB%AC%BC%EC%9D%8C%ED%91%9C%EA%B0%80%20%ED%91%9C%EC%8B%9C%EB%90%A9%EB%8B%88%EB%8B%A4..png)
경로 뒤에 파일 크기가 포함되도록 locatedb
용도 를 구축했습니다 (대용량 파일을 빠르게 찾는 데 도움이 됩니다). frcode
경로와 크기를 탭으로 구분하여 저장합니다. 명령줄에서 찾기를 사용하면 ?
탭이 있어야 할 위치에 (물음표)가 나타나는 것을 확인했습니다.내가 보내지 않는 이상 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에서도 마찬가지입니다. 나는오류 보고서.