diff a directory recursively, ignoring all binary files
Kind of cheating but here's what I used:
diff -r dir1/ dir2/ | sed '/Binary\ files\ /d' >outputfile
This recursively compares dir1 to dir2, sed removes the lines for binary files(begins with "Binary files "), then it's redirected to the outputfile.
Maybe use grep -I
(which is equivalent to grep --binary-files=without-match
) as a filter to sort out binary files.
dir1='folder-1'dir2='folder-2'IFS=$'\n'for file in $(grep -Ilsr -m 1 '.' "$dir1"); do diff -q "$file" "${file/${dir1}/${dir2}}"done
I came to this (old) question looking for something similar (Config files on a legacy production server compared to default apache installation). Following @fearlesstost's suggestion in the comments, git
is sufficiently lightweight and fast that it's probably more straightforward than any of the above suggestions. Copy version1 to a new directory. Then do:
git initgit add .git commit -m 'Version 1'
Now delete all the files from version 1 in this directory and copy version 2 into the directory. Now do:
git add .git commit -m 'Version 2'git show
This will show you Git's version of all the differences between the first commit and the second. For binary files it will just say that they differ. Alternatively, you could create a branch for each version and try to merge them using git's merge tools.