Remix.run Logo
db48x 12 hours ago

> Or maybe you pipe into xargs and pray your filenames don’t have spaces…

Always use -0. Most gnu utilities support it. It makes them put a null byte after every filename instead of a newline. Completely eliminates the problem of dealing with whitespace in the filenames.

AdieuToLogic 12 hours ago | parent | next [-]

To support your recommendation and redress the strawman the article postulates, the post's author could have replaced:

  find . -name '*.log' | xargs rm
With:

  find . -name '*.log' -print0 | xargs -0 rm
tjalfi 3 hours ago | parent [-]

This one doesn't need xargs.

  find . -name '*.log' -delete
sgarland 3 hours ago | parent [-]

THANK YOU. I kept nodding along to all of the xargs comments, thinking “sure, but what about the even easier solution?”

dieulot 2 hours ago | parent | prev | next [-]

No dependency on GNU required anymore, POSIX 2024 supports it: https://blog.toast.cafe/posix2024-xcu#the-null-option

jsrcout 8 hours ago | parent | prev [-]

For tools that don't support -0, you can add the NULs yourself without much fuss. It's a one-liner in awk/perl/sed. Very handy.

ykonstant 6 hours ago | parent [-]

If you do not have -0 options in your xargs/find, I wonder if you will have those extensions in your awk/sed. Perl is a different story.

MrDOS 4 hours ago | parent [-]

I think the parent was referring to using awk/sed to do the equivalent of:

    find ... | tr '\n' '\0' | xargs -0 ...
I.e., a blind replacement without the tool having any particular semantic understanding of what it's translating.

That still requires your xargs to have -0 support, though, and I'd be surprised to have that without the corresponding option on find. But I've done this before when feeding xargs from something other than find.

mr_mitm 22 minutes ago | parent [-]

It is also built on the assumption that filenames never contain newlines, which is wrong in general.

It's baffling to me that POSIX allows non-printable characters in file names, but here we are. Surely they had a reason for this decision.