Here is how to make find
output file names so that they can be
used by other programs without being mangled or misinterpreted. You can
process file names generated this way by giving the -0 or
--null option to GNU xargs
, GNU tar
, GNU
cpio
, or perl
.
True; print the full file name on the standard output, followed by a null character.
As of findutils version 4.2.4, the locate
program also has a
--null option which does the same thing. For similarity with
xargs
, the short form of the option -0 can also be used.
If you want to be able to handle file names safely but need to run
commands which want to be connected to a terminal on their input, you
can use the --arg-file option to xargs
like this:
find / -name xyzzy -print0 > list xargs --null --arg-file=list munge
The example above runs the munge
program on all the files named
xyzzy that we can find, but munge
's input will still be
the terminal (or whatever the shell was using as standard input). If
your shell has the “process substitution” feature <(...), you
can do this in just one step:
xargs --null --arg-file=<(find / -name xyzzy -print0) munge