I'm using locate(1)
from GNU findutils for a little task and it seems as if it buffers its output. I am piping the output of locate to another task that will process the lines as locate finds them. Since locate might take a long time to run, I thought that locate would print out the files as they were found, but it seems that locate is buffering the output.
If I run locate on a TTY, it prints out the first match immediately, and uses maybe 10 seconds to find the rest of the matches.
If, instead I run locate but pipe to cat, I see nothing until the entire command completes.
It seems that locate buffers the output, and has no way of turning it off.
What I want to achieve is to locate some files, and run a command immediately after finding it by piping the output.
locate something | xargs -n 1 do_something
But what happens is that xargs and hence do_something aren't invoked until find completes.
find
(rather thanlocate
, as suggested by your title) you should be able to use its-exec
action todo_something
without requiring a pipe toxargs
– steeldriver Sep 29 '16 at 11:46locate
, notfind
. Sorry about the confusion. Yes, forfind
-exec
would be the best alternative. – mogsie Sep 29 '16 at 12:53