WenJunjie Blog

sysadmin

Compare Directories via Diff

| Comments

制作补丁

diff -uN oldfile newfile > file.patch diff -Nur srcode srcode_update > srcodechange.patch

发布

patch -Np0 < srcodechange.patch

还原

patch -Rp0 < srcodechange.patch

LC_ALL=C TZ=UTC0

diff -Naur patch -p0 patch -N p0 patch -R p0

cd srcode patch -p1 < ../srcodechange.patch patch -pN < patch.file

find . -name *.rej > reject

快速比较两个目录

diff -c -r service service.bak diff -c -a -b -r service service.bak

diff -r service service.bak diff -r –brief service service.bak

diff -qr service service.bak rsync -vnr service/ service.bak/

-n, –dry-run perform a trial run with no changes made rsync -avn src dst –delete –size-only –ignore-existing

可以用: diff -qr directory1/ directory2/ rsync -vnr directory1/ directory2/ 但是很慢。因为文件也被比较了。给rsync加上“–ignore-existing”的选项要好很多。 如果只是想比较目录结构,可以 ls -R directory1 > directory1.txt ls -R directory2 > directory2.txt diff –side-by-side –suppress-common-lines directory1.txt directory2.txt 如果给ls加上“-1s”的选项(注意:是1,2,3的1,不是l,m,n的l),还可以比较文件的大小。

假如我要比较目录A和目录B,使用下面的命令 diff -c -a -b -x .bak -x .log A B > AB.diff gvim AB.diff 这样就可以方便的查看不同了,目前我的vim的diff配色比较舒适。 解释一下参数的意义 -c 采用content的format输出different -a 强制使用text的模式 -b 忽略空白的不同 -x 过滤掉所比较目录中一些不想比较的文件类型,可以使用其他的pattern 实际上如果需要过滤的文件类型比较多的时候,使用-x这个选项就有点麻烦了,查看了文档之后,diff提供了更加方便的参数过滤文件。 -X excludefile 忽略在excludefile中的文件类型,注意每种文件占一行

diff -ruNa A B diff -uN A B

对比两个文件 先过滤掉重复的行 cat 1.txt |sort |uniq -c|sort -rn|awk ‘{print $2}’ >file1.txt cat 2.txt |sort |uniq -c|sort -rn|awk ‘{print $2}’ >file2.txt cat file1.txt |xargs -l1 -i grep {} file2.txt > tmp.txt

echo -n ‘hello’|md5sum|cut -d ‘ ’ -f1 md5sum log.iso |cut -d ‘ ’ -f1 md5sum log.iso > log.iso.md5 md5sum -c log.iso.md5

diff -qr dirA dirB | grep -v -e ‘DS_Store’ -e ‘Thumbs’ | sort > diffs.txt

比较两个目录大小 diff <(du -sh dir1) <(du -sh dir2)

对比文件内容并删除相同部分 对比已经排过序的文件 comm -23 file1 file2

grep -v -f file2 file1

打印出file1、file2文件,第一列为行数、第二列为两文件内容 |然后按第二列排序|删除重复行(sort -u也可以,但它会保留一个重复项)|在按第一列行数排序|打印出第二列 [root@kinggoo.com test1]# awk ‘{print NR,$0}’ file1 file2 |sort -k2|uniq -u -f 1|sort -k1|awk ‘{print $2}’

awk ‘{print $0}’ file1 file2 |sort|uniq -u

排序去重 sort -u [file] = sort [file] | uniq (去重) uniq 和 comm 命令需要使用已经排序好的内容才有意义。注意文件格式要为unix uniq 最重要参数: 默认(去重) | -d(显重) | -u(删重) comm 功能说明:比较两个已排序的文件

第一:两个文件的交集,并集 前提条件:两个文件不得有重复的行(即两个文件都要去重) 1. 取出两个文件的并集 cat file1 file2 | sort | uniq >file3 2. 取出两个文件的交集 cat file1 file2 | sort | uniq -d >file3 3. 删除交集 cat file1 file2 | sort |uniq -u >file3 第二:两个文件合并 1. 一个在上一个在下 cat file1 files2 >file3 2. 一个在左一个在右 paste file1 file2 >file3 3. cat file1 >> file2 第三:一个文件去掉重复行 1. sort file | uniq 把重复的行合并为一行 2. sort file | uniq -u 把重复的行删除,仅保留非重复的行

join -t: -i -1 3 -2 1 TEACHER1.db TEACHER_HOBBY.db cut -d: -f1-3 TEACHER.db

Comments