Loccate(1)은 출력을 버퍼링합니다.

Loccate(1)은 출력을 버퍼링합니다.

저는 locate(1)작은 작업을 위해 GNU findutils를 사용하고 있는데 출력을 버퍼링하는 것 같습니다. 찾기의 출력을 찾기가 찾은 행을 처리하는 다른 작업으로 파이프합니다. 찾기를 실행하는 데 시간이 오래 걸릴 수 있기 때문에 찾기가 찾은 파일을 인쇄할 것이라고 생각했지만 찾기가 출력을 버퍼링하는 것처럼 보입니다.

TTY에서 찾기를 실행하면 첫 번째 일치 항목이 즉시 인쇄되고 나머지 항목을 찾는 데 10초 정도 걸립니다.

반대로, 찾기를 실행하고 파이프라인을 cat으로 실행하면 전체 명령이 완료될 때까지 아무 것도 표시되지 않습니다.

찾기는 출력을 버퍼링하고 끌 수 없는 것으로 보입니다.

내가 달성하고 싶은 것은 일부 파일을 찾아 파이프 출력을 통해 발견되는 즉시 명령을 실행하는 것입니다.

locate something | xargs -n 1 do_something

그러나 xargs와 do_something은 find가 완료될 때까지 호출되지 않습니다.

답변1

물론 게시 직후에 답을 찾았습니다.게시 시 stackexchange에서 추천하는 게시물.

unbuffer(예상대로) 문제가 해결되었습니다.

unbuffer locate something | xargs -n 1 do_something

명령 실행은 찾기가 명령을 찾는 것만큼 빠릅니다.

답변2

locatelocateSTDOUT 스트림을 버퍼링하려면 STDOUT을 버퍼링되지 않은(또는 라인 버퍼링된) 만들어야 합니다 .

GNU 시스템을 사용하고 있다면 이를 사용할 수 있습니다 stdbuf(GNU가 함께 제공됩니다 coreutils).

STDOUT을 버퍼링되지 않게 만들려면 다음을 수행하세요 locate.

stdbuf -o0 locate something | ...

라인 버퍼링:

stdbuf -oL locate something | ...

더 많은 아이디어를 확인해 보세요 man stdbuf.

관련 정보