|
||
|
|
|||||||
| Welcome to the Exploding Garrmondo Weiner Interactive Swiss Army Penis. |
|
GFF is a community of gaming and music enthusiasts. We have a team of dedicated moderators, constant member-organized activities, and plenty of custom features, including our unique journal system. If this is your first visit, be sure to check out the FAQ or our GFWiki. You will have to register before you can post. Membership is completely free (and gets rid of the pesky advertisement unit underneath this message).
|
![]() |
|
|
Thread Tools |
Directory Comparer?
Does anyone know of a good tool to compare two directories and tell me the differences between them? I've got a couple of directories, each with about 3,000 pictures in them (convienienty named DSC_****.JPG) that are about 95% the same. I want something to quickly tell me what files are in one that aren't in the other. I could probably whip up a quick UNIX shell script, except that this is a Windows box. Google brought up the usual list of generic spyware that I don't particularly trust. Anyone know of anything that might do what I need?
Oh, and all I need it to compare is filenames. It doesn't need to, and in fact should NOT check if the files themselves are identical (which is part of why I can't use rsync). Jam it back in, in the dark. |
I have used windiff in the past. It is part of windows support tools and you can download it at the following address
http://www.microsoft.com/downloads/d...DisplayLang=en There's nowhere I can't reach. |
Cool. Thanks. I ended up just booting into Gentoo and writing a shell script after all. I gave in. That tool could have been useful, however.
This thing is sticky, and I don't like it. I don't appreciate it. |
I am a dolphin, do you want me on your body? |
If you don't mind, of course. I was speaking idiomatically. |
You could have used CygWin for POSIX emulation. Great for having a unix environment on your windows system.
What kind of toxic man-thing is happening now? |
diff /home/tkang /home/tkang/J2Rev.0.2 I get Only in /home/tkang: .bash_history Only in /home/tkang: .bash_profile ... Only in /home/tkang/J2Rev.0.2: Getstring.h etc... You can also use it to compare files as well. How ya doing, buddy? |
However, a quick bit of Googling found cmptree, which is kind of what I wanted except on steroids. Code:
#!/bin/bash
#
# cmptree: compare directory trees recursively and report the differences.
# Author: Ives Aerts
function gettype () {
if [ -L $1 ]; then
echo "softlink"
elif [ -f $1 ]; then
echo "file"
elif [ -d $1 ]; then
echo "directory"
else
echo "unknown"
fi
}
function exists () {
if [ -e $1 -o -L $1 ]; then
return 0;
else
echo "$1 does not exist."
return 1;
fi
}
function comparefile () {
cmp -s $1 $2
if [ $? -gt 0 ]; then
echo "$1 different from $2"
# else
# echo "$1 same as $2"
fi
return
}
function comparedirectory () {
local result=0
for i in `(ls -A $1 && ls -A $2) | sort | uniq`; do
compare $1/$i $2/$i || result=1
done
return $result
}
function comparesoftlink () {
local dest1=`ls -l $1 | awk '{ print $11 }'`
local dest2=`ls -l $2 | awk '{ print $11 }'`
if [ $dest1 = $dest2 ]; then
return 0
else
echo "different link targets $1 -> $dest1, $2 -> $dest2"
return 1
fi
}
# compare a file, directory, or softlink
function compare () {
(exists $1 && exists $2) || return 1;
local type1=$(gettype $1)
local type2=$(gettype $2)
if [ $type1 = $type2 ]; then
case $type1 in
file)
comparefile $1 $2
;;
directory)
comparedirectory $1 $2
;;
softlink)
comparesoftlink $1 $2
;;
*)
echo "$1 of unknown type"
false
;;
esac
else
echo "type mismatch: $type1 ($1) and $type2 ($2)."
false
fi
return
}
if [ 2 -ne $# ]; then
cat << EOU
Usage: $0 dir1 dir2
Compare directory trees:
files are binary compared (cmp)
directories are checked for identical content
soft links are checked for identical targets
EOU
exit 10
fi
compare $1 $2
exit $?
What, you don't want my bikini-clad body? |
here's a rough command that could be used in the console in windows to tell what files in the source folder are or aren't in the destination folder and dump whether or not they filecompare as the same file as well. I think it gets rather spammy though if files don't compare exactly.
it would be run from the source directory and tmp2 would need to be replaced with the target directory. for %i in ( *.* ) do if exist "tmp2\%i" (fc %i tmp2\%i >> Filecompare.txt ) else echo File tmp2\%i not found >> FileNOTFound.txt ah the good old days before GUI's did all this crap. Jam it back in, in the dark. |