如何用Rsync对比两个目录仅列出有差异的文件?
解决rsync只显示差异文件而非所有目录的问题
我之前也碰到过一模一样的情况!你当前用的rsync -avcn folder1/* folder2/命令里,-v(详细输出)参数会把rsync遍历到的所有目录都打印出来,再加上-a(归档模式)自带的递归特性,就导致结果里混了一堆无关的目录行。下面给你两个实用的解决办法:
方法一:用--out-format指定输出格式
直接让rsync只输出有差异的文件名,完全避开目录行:
rsync -acn --out-format="%n" folder1/ folder2/
参数说明:
-a:保持归档模式,递归处理文件、保留权限等属性-c:基于文件校验和而非修改时间/大小对比,更准确-n:模拟运行,不会实际同步文件--out-format="%n":只输出有差异的文件名(包括新增、修改、需要删除的文件)
另外注意把folder1/*改成folder1/,这样rsync会处理folder1下的所有内容(包括隐藏文件),而folder1/*会漏掉以.开头的隐藏文件。
方法二:用grep过滤目录行
如果你更习惯原来的命令结构,可以用grep把结尾带/的目录行过滤掉:
rsync -avcn folder1/ folder2/ | grep -v '/$'
这里grep -v '/$'的作用是反向匹配所有以/结尾的行(也就是目录),只留下文件相关的差异行。
这两种方法都能帮你精准拿到有差异的文件列表,选哪个看你的使用习惯就行~
内容的提问来源于stack exchange,提问作者Joshi
相关产品推荐
相关产品推荐

