比较两个目录并获取具有绝对路径的输出

比较两个目录并获取具有绝对路径的输出

试图比较两个目录。一个目录是参考目录 (dir1),另一个目录是进行修改的目录 (dir2)

我需要在 dir2 中相对于 dir1 修改或添加的文件列表。

我使用了 rsync 和 diff 并获得了结果。但输出中需要具有绝对路径的文件。

diff --brief --recursive /test/dir2 /reference/dir1

输出为

仅在/test/dir2中:king.txt

仅在/test/dir2/sdir2中:abc.txt

仅在/test/dir2中:test1

仅在/test/dir2/sdir3中:test.txt

并使用 rsync

rsync -av --dry-run /测试/dir2/ /参考/dir1

输出

发送增量文件列表

./

国王.txt

测试.txt

sdir2/

sdir2/abc.txt

测试1/

发送 52712 字节 接收 1339 字节 108102.00 字节/秒

总大小为 0 加速为 0.00 (试运行)

需要完整路径为 /test/dir2/king.txt 的列表并将其存储在一个文件中。

此致敬意,KJ。

答案1

应该很容易调整 diff 输出以满足您的需求...只需通过 sed 管道传输 diff 即可。

sed -r -e 's/^.*Only in //' -e 's@: @/@'

答案2

您可以只解析输出diff

diff --brief --recursive /test/dir2/ /reference/dir1/ | 
  gawk '(/Only/){print $3""$NF}' | sed 's/://'

确保/在目录名称中包含尾随字符,此解决方案需要它们。请使用/test/dir2/和 而不是/test/dir2。此外,如果您的文件名包含空格,此方法将不起作用。

相关内容