compare contents of two directories on remote serv

2019-01-30 04:34发布

I am new to unix and need some help here. I have two directories present on two different server. both the directories contains the same files. Now i want to check if all files are in sync in both the directories. If files are not in sync then i want to display only name of those files. I am able to do it when directories are on same server. not able to figure out how to do this when directories are present on two different servers.

eg:
server1 /abc/home/sample1/
server2 /abc/home/sample2/

here i want only files name to display when it not in sync.

Thanks in advance

3条回答
疯言疯语
2楼-- · 2019-01-30 04:57

On server1:

cd /abc/home/sample1/ && diff --side-by-side --suppress-common-lines <(find . -type f|xargs stat --printf "%s\t%n\n"|sort -n) <(ssh server2 "cd /abc/home/sample2/ && find . -type f|xargs stat --printf \"%s\t%n\n\"|sort -n")

This is pretty fast but probably not as accurate as rsync since it uses file size instead of hash of content. Also, the rsync from kielni's answer will not show anything if server2 has more files then server1. Instead try this:

rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/
查看更多
唯我独甜
3楼-- · 2019-01-30 05:03

You can use rsync with the -n flag to find out if the files are in sync, without actually doing a sync.

For example, from server1:

rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/

This will print the names of all files (recursive, with the -r flag) that differ between server1:/abc/home/sample1/ and server2:/abc/home/sample2/

rsync used parameters explanation

-n, --dry-run - perform a trial run with no changes made

-a, --archive - archive mode; equals -rlptgoD (no -H,-A,-X)

-v, --verbose - increase verbosity

-r, --recursive - recurse into directories

-c, --checksum - skip based on checksum, not mod-time & size

查看更多
太酷不给撩
4楼-- · 2019-01-30 05:07

In scenario of no connectivity between two servers, use "tree" command to get directory structure in files and then diff two files.

查看更多
登录 后发表回答