我是Unix的新手,需要帮助。 我有两个目录存在于两个不同的服务器上。 这两个目录都包含相同的文件。 现在我想检查这两个目录中的所有文件是否同步。 如果文件不同步,那么我只想显示这些文件的名称。 当两个目录在同一台服务器上时,我可以做到这一点,但不知道如何在两个不同服务器上实现。
eg:
server1 /abc/home/sample1/
server2 /abc/home/sample2/
当文件不同步时,我希望只显示文件名。
先行致谢。
我是Unix的新手,需要帮助。 我有两个目录存在于两个不同的服务器上。 这两个目录都包含相同的文件。 现在我想检查这两个目录中的所有文件是否同步。 如果文件不同步,那么我只想显示这些文件的名称。 当两个目录在同一台服务器上时,我可以做到这一点,但不知道如何在两个不同服务器上实现。
eg:
server1 /abc/home/sample1/
server2 /abc/home/sample2/
当文件不同步时,我希望只显示文件名。
先行致谢。
-n
选项来查找文件是否同步,而不实际执行同步操作。rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/
使用rsync
命令和-r
选项,递归比较server1:/abc/home/sample1/
和server2:/abc/home/sample2/
两个目录下的所有文件(包括子目录),并打印出不同的文件名。rsync
命令中的其他选项包括:
-n, --dry-run
- 模拟运行,不进行实际操作
-a, --archive
- 归档模式;等同于-rlptgoD(不包括-H,-A,-X选项)
-v, --verbose
- 增加详细输出
-c, --checksum
- 基于校验和而非修改时间和文件大小来判断是否跳过文件复制
rsync -avcn folder1/ folder2/
。 - mniess-n
只是 --dry-run
的简写。 - StackEng2010在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")
这个方法相当快,但可能比rsync不够准确,因为它使用文件大小而不是内容哈希。 此外,kielni的回答中的rsync如果server2有更多的文件,则不会显示任何东西。 可以尝试使用以下方法:
rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/
rsync -avcn
来完成这样的任务-我是一个CLI粉丝。其思想是进行“干跑”(-n
),它显示了将要执行的操作,而不会复制任何文件或进行任何更改。使用-c
开关非常重要,因为它使用校验和而不是修改日期或文件大小来确定文件是否不同。-a
确保比较更彻底,并强制程序进入子目录。最后,-v
增加了详细程度,这在发现不同的文件时很有用。rsync -avcn source_dir/ dest_dir/
并且rsync
将打印出在两个目录之间不同的文件名。请注意尾随斜杠-它们是必需的。
然而:
rsync -avcn source_dir/ dest_dir/ > diffs.txt
rsync -avcn /src/My Dir/ dest/My dir/
不是您想要的;相反,您应该使用 rsync -avcn /src/My\ Dir/ dest/My\ Dir/
或者 rsync -avcn /src/"My Dir"/ dest/"My Dir"/
。在处理Windows挂载时,这一点尤其重要。如果两台服务器之间没有连接,则可以使用“tree”命令获取文件夹结构,然后比较两个文件。