Null-Delimited
Standard -print0 | xargs -0 pattern — list all .adoc files safely
find /home/evanusmodestus/atelier/_bibliotheca/domus-captures/docs -name '*.adoc' -print0 \
| xargs -0 ls -l
Count lines across files safely
find /home/evanusmodestus/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/partials/codex \
-name '*.adoc' -print0 \
| xargs -0 wc -l
Safe rm — delete temp files with spaces in names
# Setup: create files with spaces
mkdir -p /tmp/xargs-demo
touch /tmp/xargs-demo/"file one.txt" /tmp/xargs-demo/"file two.txt"
# Safe delete
find /tmp/xargs-demo -name '*.txt' -print0 | xargs -0 rm -v
Safe grep across files
find /home/evanusmodestus/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/pages \
-name '*.adoc' -print0 \
| xargs -0 grep -l 'include::partial'
Why whitespace breaks without -0 — demonstration
# Create files with spaces
mkdir -p /tmp/xargs-demo
touch /tmp/xargs-demo/"my file.txt" /tmp/xargs-demo/"your file.txt"
# WRONG — xargs splits on whitespace, treats "my" and "file.txt" as separate args
find /tmp/xargs-demo -name '*.txt' | xargs ls -l
# CORRECT — null-delimited preserves full path as one argument
find /tmp/xargs-demo -name '*.txt' -print0 | xargs -0 ls -l
Null-delimited from grep -lZ (--files-with-matches --null)
grep -rlZ 'xref:' /home/evanusmodestus/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/pages \
| xargs -0 wc -l
Null-delimited sort for safe pipeline chaining
find /home/evanusmodestus/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/pages \
-name '*.adoc' -print0 \
| sort -z \
| xargs -0 -n1 basename
Safe chmod across directories
find /home/evanusmodestus/atelier/_bibliotheca/domus-captures/docs -type d -print0 \
| xargs -0 ls -ld
Combine -0 with -n1 for per-file operations
find /home/evanusmodestus/atelier/_bibliotheca/domus-captures/docs/modules/ROOT/partials/codex/awk \
-name '*.adoc' -print0 \
| xargs -0 -n1 head -1
tr for null-delimited output from non-find sources
printf 'alpha\nbeta\ngamma\n' | tr '\n' '\0' | xargs -0 -n1 echo "item:"