On Thu, Jul 15, 2004 at 07:14:30AM +0800, John Summerfield wrote:
find ~ -type f -exec cat {} \;
This fails because
cat doesn't check anything - it just copies all files to stdout
It doesn't handle files whose names contain spaces
Hu? I used cat solely for the purpose of showing how to execute
arbitrary commands recursively for each file in a directory tree.
How exactly does cat care about its argument containing spaces?
Since he specifically said he wants to use mdsum, it's clearer to use
the program he said he wants to use.
Generally true but in this case the specific command executed by find
is irrelevant.
Try it and see what happens.
Ok:
<lal@ddm ~/tmp>find a -type f -exec echo .{}. \;
.a/b b/file.
.a/ b/ c c/file.
.a/bb b /file with spaces.
.a/file with spaces.
<lal@ddm ~/tmp>find a -type f -exec md5sum {} \;
d41d8cd98f00b204e9800998ecf8427e a/b b/file
d41d8cd98f00b204e9800998ecf8427e a/ b/ c c/file
d41d8cd98f00b204e9800998ecf8427e a/bb b /file with spaces
d41d8cd98f00b204e9800998ecf8427e a/file with spaces
Where's the problem?
The problem is that fragments of file names separated by spaces are
indistinguishable from filenames separated by spaces.
This is only true when the command line is being split into words, e.g.
by the shell. find's '{}' parameter is given to the command literally
as one of the strings in argv[], it is *not* parsed for token delimiter
characters or anything.