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

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

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

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

대신 find를 실행하고 cat으로 파이프하면 전체 명령이 완료될 때까지 아무 것도 표시되지 않습니다.

Locate는 출력을 버퍼링하는 것으로 보이며 출력을 끌 수 있는 방법이 없습니다.

내가 달성하고 싶은 것은 일부 파일을 찾고, 출력을 파이핑하여 찾은 후 즉시 명령을 실행하는 것입니다.

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더 많은 아이디어를 얻으려면 확인하세요 .

관련 정보