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: <[EMAIL PROTECTED] ~/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. <[EMAIL PROTECTED] ~/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. Regards Matthias -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]