Linux下快速比较两个目录的不同(2)

0 directories, 3 files
/root/b
├── 2.png
├── 3.png
├── 4.png
└── xen
    └── scripts
        └── block-drbd

首先比较这两个目录得到文件列表的差异。
find /root/a -printf "%P\n" | sort > /tmp/file1
find /root/b -printf "%P\n" | sort | diff /tmp/file1 - >diff.txt

然后从diff.txt中过滤出/root/a中多出的文件和/root/b中多出的文件。
# /root/a中多出的文件
awk '/</{printf("%s%s\n","/tmp/etc/",$2)}' diff.txt
/tmp/etc/1.png

# /root/b中多出的文件
awk '/>/{printf("%s%s\n","/tmp/etc/",$2)}' diff.txt
/tmp/etc/4.png
/tmp/etc/xen
/tmp/etc/xen/scripts
/tmp/etc/xen/scripts/block-drbd

需要注意的是,如果多了某个目录,则这个目录和其内所有文件都会列出来。如果要将多出的文件复制到其他地方,应当要注意这一点。

如果只想要比较出/root/a和/root/b下的文件和目录的不同,不再递归到子目录中比较。那么可以在find上继续加工一番:
find /root/a -maxdepth 1 -printf "%P\n" | sort > /tmp/file1
find /root/b -maxdepth 1 -printf "%P\n" | sort | diff /tmp/file1 - >diff.txt
# /root/a中多出的文件
awk '/</{printf("%s%s\n","/tmp/etc/",$2)}' diff.txt
/tmp/etc/1.png

# /root/b中多出的文件
awk '/>/{printf("%s%s\n","/tmp/etc/",$2)}' diff.txt
/tmp/etc/4.png
/tmp/etc/xen

这样一来,/root/b中多出的文件就是4.png和xen,xen目录中的文件不再列出。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12781.html