Hello guys,
I have two mirrors. I need to compare files and directories on both mirrors and as a result print list of those which are missing on mirror 2
What i did
find /data > find.mirror1
find /data > find.mirror2
Now i need to get list of those directories which are missing in mirror1.
Thanks in advance!
David
On Thu, Oct 23, 2008 at 11:53:20AM +0200, David Hláčik wrote:
Hello guys,
I have two mirrors. I need to compare files and directories on both mirrors and as a result print list of those which are missing on mirror 2
What i did
find /data > find.mirror1
find /data > find.mirror2
Now i need to get list of those directories which are missing in mirror1.
Thanks in advance!
I use this bash function: dirdiff () { local src="$1" dst; dst="${2:-.}"; if [ -z "$src" ]; then err "missing original directory"; return 1; fi; if ! [ -d "$src" ]; then err "$src: not a directory"; return 1; fi; if ! [ -d "$dst" ]; then err "$dst: not a directory"; return 1; fi; diff -u <(cd "$src" && find . | LC_ALL=C sort | sed -e 's/^..//') <(cd "$dst" && find . | LC_ALL=C sort | sed -e 's/^..//') }
David Hláčik wrote:
Hello guys,
I have two mirrors. I need to compare files and directories on both mirrors and as a result print list of those which are missing on mirror 2
Can you use rsync with the -n switch (dryrun) to mirror from mirror 1 to mirror 2 and see what would be transferred?
Mogens
David Hlác(ik wrote:
Hello guys,
I have two mirrors. I need to compare files and directories on both mirrors and as a result print list of those which are missing on mirror 2
What i did
find /data > find.mirror1
find /data > find.mirror2
Now i need to get list of those directories which are missing in mirror1.
You can run diff with the two files, but why not just use rsync to fix it in a single step?
To compare directories with rsync, cd into one of them and: rsync -avn . /target/path The -n option says to not actually copy files, but with the -v option this will list the files that are missing or different. Because the -a option also sets the owner and modes, this may list files where those are the only differences. Omit the -n option to make the changes.
The target path may be on a different host if you use the form user@host:/path/to/target. With older versions of rsync you might have to add -essh to the arguments but that is the default now. If you would like any extra files in the target copy to be deleted, you can add the --delete option, but be sure you know what you are doing first.
On Thu, 2008-10-23 at 11:53 +0200, David Hláčik wrote:
Hello guys,
I have two mirrors. I need to compare files and directories on both mirrors and as a result print list of those which are missing on mirror 2
What i did
find /data > find.mirror1
find /data > find.mirror2
Now i need to get list of those directories which are missing in mirror1.
diff --brief --recursive /dir1 /dir2 &> /tmp/dir1vsdir2 # good enough?
$ mkdir dir1 dir2 $ mkdir dir1/{a,b,c,d} dir2/{b,d} $ diff --recursive --brief dir1 dir2 Only in dir1: a Only in dir1: c $
Thanks in advance!
David
<snip sig stuff>
HTH