How can you perform a recursive diff of the files in two directories (a and b):
$ diff -r a b
but only look at files whose name matches a given pattern. For example, using the same syntax available in the find command, this would look like:
$ diff -r a b -name "*crazy*"
which would show diffs between files with the same name and path in a and b, which have “crazy” in their name.
Effectively, I’m looking for the opposite of the –exclude option which is available in diff.
Perhaps this is a bit indirect, but it ought to work. You can use
findto get a list of files that don’t match the pattern, and then “exclude” all those files:The
-X -will makediffread the patterns from stdin and exclude anything that matches. This should work provided your files don’t have funny chars like*or?in their names. The only downside is that your diff won’t include thefindcommand, so the listeddiffcommand is not that useful.(I’ve only tested it with GNU
findanddiff).EDIT:
Since only non-GNU
finddoesn’t have-printf,sedcould be used as an alternative:That’s also assuming that non-GNU
diffhas-Xwhich I don’t know.