在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这又是一个文件比较命令,熟练掌握会节省你很多工作。还记得comm命令吗?diff比他更加复杂,好用,不仅能比较文件,还能比较目录。 当一个文件有多个版本时候,或者更多复杂的文件,目录比较时,你会期望有一个比comm更有用的命令,diff正是为此而生。 全称:different file 实例: 文件1: v1.txt 复制代码 代码如下: hello world v1_echo v1_diff v1_comm shell is easy! 文件2: v2.txt 复制代码 代码如下: hello world! v2_echo v1_diff easy shell! 1.普通比较: 复制代码 代码如下: 1,2c1,2 < hello world < v1_echo --- > hello world! > v2_echo 4c4 < v1_comm --- > easy shell! 列出比较的区别,数字为行数,c是compare 2.一体化输出: $diff -u v1.txt v2.txt > version.patch 复制代码 代码如下: -v1_echo +hello world! +v2_echo v1_diff -v1_comm +easy shell! shell is easy! "+"表示补充的行,"-"表示删去的行 3. 更新覆盖v1.txt,注意这里借用了patch $patch –p1 v1.txt< version.patch 4. 比较v1,v2文件,仅输出v2的变化 $diff -e v1.txt v2.txt 复制代码 代码如下: 4c easy shell! . 1,2c hello world! v2_echo . 5.比较目录 借用书上一段解释: -N 将所有确实的文件视为空文件 比较两个目录下所有文本信息 $diff –Naur directory1 directory2 除非你确定这两个目录基本相同,不然不推荐这么用。 6.工作疲劳后,尤其同时做很多事情的时候,会忘了有没有做过上传,或者修改某个目录下的文件。可以这样: $diff v1.txt /${dir} 直接比较同名文件,高强度下的工作者相信真有体会。 解读下—help 太长,截取少部分解读一下。 复制代码 代码如下: Mandatory arguments to long options are mandatory for short options too. --normal output a normal diff (the default) -q, --brief report only when files differ -s, --report-identical-files report when two files are the same -c, -C NUM, --context[=NUM] output NUM (default 3) lines of copied context -u, -U NUM, --unified[=NUM] output NUM (default 3) lines of unified context -e, --ed output an ed script -n, --rcs output an RCS format diff -y, --side-by-side output in two columns FILES 的格式可以是‘FILE1 FILE2'、‘DIR1 DIR2'、‘DIR FILE...'或 ‘FILE... DIR'。 解读: 1.-q –s -q: 只有两个不同是,提示“两个文件不同” -s: 两个文件相同时,提示“两个文件相同” $diff -qs v1.txt v2.txt (有点无聊的命令 ) 2. –y 按照列的方式输出,增加了直观性 复制代码 代码如下: hello world | hello world! v1_echo | v2_echo v1_diff v1_diff v1_comm | easy shell! shell is easy! shell is easy! 3. file 后面的格式 可以是1.文件 文件 2.目录与目录 3.文件与目录 4. 目录与文件 复制代码 代码如下: 用法:diff [选项]... FILES Compare FILES line by line. Mandatory arguments to long options are mandatory for short options too. --normal output a normal diff (the default) -q, --brief report only when files differ -s, --report-identical-files report when two files are the same -c, -C NUM, --context[=NUM] output NUM (default 3) lines of copied context -u, -U NUM, --unified[=NUM] output NUM (default 3) lines of unified context -e, --ed output an ed script -n, --rcs output an RCS format diff -y, --side-by-side output in two columns -W, --width=NUM output at most NUM (default 130) print columns --left-column output only the left column of common lines --suppress-common-lines do not output common lines -p, --show-c-function show which C function each change is in -F, --show-function-line=RE show the most recent line matching RE --label LABEL use LABEL instead of file name (can be repeated) -t, --expand-tabs expand tabs to spaces in output -T, --initial-tab make tabs line up by prepending a tab --tabsize=NUM tab stops every NUM (default 8) print columns --suppress-blank-empty suppress space or tab before empty output lines -l, --paginate pass output through `pr' to paginate it -r, --recursive recursively compare any subdirectories found -N, --new-file treat absent files as empty --unidirectional-new-file treat absent first files as empty --ignore-file-name-case ignore case when comparing file names --no-ignore-file-name-case consider case when comparing file names -x, --exclude=PAT exclude files that match PAT -X, --exclude-from=FILE exclude files that match any pattern in FILE -S, --starting-file=FILE start with FILE when comparing directories --from-file=FILE1 compare FILE1 to all operands; FILE1 can be a directory --to-file=FILE2 compare all operands to FILE2; FILE2 can be a directory -i, --ignore-case ignore case differences in file contents -E, --ignore-tab-expansion ignore changes due to tab expansion -Z, --ignore-trailing-space ignore white space at line end -b, --ignore-space-change ignore changes in the amount of white space -w, --ignore-all-space ignore all white space -B, --ignore-blank-lines ignore changes whose lines are all blank -I, --ignore-matching-lines=RE ignore changes whose lines all match RE -a, --text treat all files as text --strip-trailing-cr strip trailing carriage return on input -D, --ifdef=NAME output merged file with `#ifdef NAME' diffs --GTYPE-group-format=GFMT format GTYPE input groups with GFMT --line-format=LFMT format all input lines with LFMT --LTYPE-line-format=LFMT format LTYPE input lines with LFMT These format options provide fine-grained control over the output of diff, generalizing -D/--ifdef. LTYPE 可以是‘old'、‘new'或‘unchanged'。GTYPE 可以是 LTYPE 的选择 或是‘changed'。 GFMT (only) may contain: %< lines from FILE1 %> lines from FILE2 %= lines common to FILE1 and FILE2 %[-][WIDTH][.[PREC]]{doxX}LETTER printf-style spec for LETTER LETTERs are as follows for new group, lower case for old group: F first line number L last line number N number of lines = L-F+1 E F-1 M L+1 %(A=B?T:E) if A equals B then T else E LFMT (only) may contain: %L contents of line %l contents of line, excluding any trailing newline %[-][WIDTH][.[PREC]]{doxX}n printf-style spec for input line number Both GFMT and LFMT may contain: %% % %c'C' the single character C %c'\OOO' the character with octal code OOO C the character C (other characters represent themselves) -d, --minimal try hard to find a smaller set of changes --horizon-lines=NUM keep NUM lines of the common prefix and suffix --speed-large-files assume large files and many scattered small changes --help display this help and exit -v, --version output version information and exit FILES 的格式可以是‘FILE1 FILE2'、‘DIR1 DIR2'、‘DIR FILE...'或 ‘FILE... DIR'。 If --from-file or --to-file is given, there are no restrictions on FILE(s). 如果 FILE 是‘-',则由标准输入读取内容。 如果输入相同,则退出状态为 0;1 表示输入不同;2 表示有错误产生。 |
请发表评论