"Andreas R." <[EMAIL PROTECTED]> wrote: > find dir1 -type f -exec sh -c 'echo "{}" dir2/"`basename "{}"`"' \; > it works, but I still don't understand completely why it works.
Actually, it still won't work in some cases. If a filename contains a double quote, like 'foo" "bar', the shell will see this command for -c: echo "foo" "bar" dir2/"`basename "foo" "bar"`" which isn't what you want. This will handle any flename properly: find dir1 -exec sh -c 'diff -q "$0" dir2/"`basename "$0"`"' {} \; The difference here is that {} is substituted by find, before sh is invoked, so if {} appears within the -c command, sh will interpret any special characters in the filename as shell syntax, not as part of the filename. Keeping {} as a separate argument to sh, and referring to it as a variable from within the command, prevents any such problems. > And where do you learn such tricks from? :) Experience, mostly. paul