3 SC2011
Michael Diamond edited this page 2020-02-22 14:42:15 -08:00

Use find -print0 or find -exec to better handle non-alphanumeric filenames.

Problematic code:

ls | xargs -n1 wc -w

Correct code:

find . -maxdepth 1 -print0 | xargs -0 -n1 wc -w
find . -maxdepth 1 -exec wc -w {} \;

Rationale:

Using -print0 separates each output with a NUL character, rather than a newline, which is safer to pipe into xargs. Alternatively using -exec avoids the problem of piping and parsing filenames in the first place.

See SC2012 for more details on this issue.