Unless I’m missing something, that’s not supported with this tool.
Unless I’m missing something, that’s not supported with this tool.
'-exec' is not supported at the moment. It's definitely something I would consider adding.
We do have '-0'/'--print0' to separate results by NULL, so 'fd' can be used in combination with 'xargs'.
find -type f -exec sed -i s/foo/bar/ {} +
This only invokes the command twice for 100k files (assuming we can pass in 64k arguments to sed)Admittedly I wrote that nearly 20 years ago so I guess it doesn't invalidate your point :-)
- There's the issue of command line length, pipe too many files and xargs will just fail.
- There's predictibility. With -exec you get to see the entire command line structure, what is escaped, what is not, what names go where. With xargs, a couple of badly named files and you are out of luck.
- Find's syntax is just more general. Xarg is limited to pushing parameters into a script, while -exec can run whatever scrit you want, with single or multiple parameters, or flags, or whatever.
Performance is almost never an issue.
especially this quote:
> find's business is evaluating expressions -- not locating files. Yes, find certainly locates files; but that's really just a side effect.
I already know how to use it. It works.
> It's often painfully slower than piping through xargs
I've tried it. It has different semantics. First attempt always leads to errors and doing the wrong things. I always have to come up with some workaround to make things work as I expect they would (i.e. how -exec does things by default).
This lack of confidence also means I would never dare using xargs for anything remotely destructive (like rm).
What reason do I have not to use -exec? Why swap a perfectly perfect hammer for a broken screwdriver?
Besides: IMO the timesaving aspects of find is not strictly tied to how fast find runs. It's tied to what I can automate.
fd -0 '\.log$' | xargs -0 tail
Edit: Swore I had gotten ARG_MAX complaints out of xargs in the past. Replies are correct though. I'm wrong here...xargs adjusts on the fly. Perhaps long ago, or some obscure use of xargs?
what?
This is fixed with the `-n` argument to xargs, which lets you specify the number of arguments per invocation.