[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: how to write a script that recursively check files in a directory with md5sum



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.

Regards
Matthias



Reply to: