我有两个目录" sampleWith"和" sampleWithout"。这两个目录都包含类似的子目录和文件结构。我如何diff
相应的文件?
例如:有以下文件" sampleWith / a / index1.html"和" sampleWithout / a / index1.html"。我想diff
这两个文件并将输出写入相应的文件(比如1.txt),我想对子目录中的所有文件执行此操作。我该怎么做呢?我知道我可以通过diff file1.html file2.html >> 1.txt
来区分两个文件以获得1.txt的输出但我不知道如果我想跨目录区分类似文件该怎么办。我有很多我想要差异的文件,手动完成每个文件需要花费很多时间。有人可以帮忙吗?谢谢!
编辑:
diff -r dir1/ dir2/
正在将其写入单个文件。有什么办法可以将输出写入不同的文件吗?
答案 0 :(得分:4)
Diff可以递归地比较目录中的文件。
此命令会将sampleWith/a
中的每个文件与sampleWithout/a
中具有相同名称的文件区分开来:
diff -r sampleWith/a sampleWithout/a
您可以使用一些shell脚本来一次区分一个文件:
cd sampleWith;
for f in `find . -name \*.html`; do
fn=`basename "%f"`
other="../sampleWithout/$f"
diff "$f" "$other" > "../$fn.diff"
done
答案 1 :(得分:2)
使用--recursive
标志。
diff --recursive sampleWith sampleWithout
<强>更新强>
要为每对文件之间的差异创建输出文件,不同的方法更合适。
创建一个可用作帮助程序的bash
脚本。称之为diff.sh
。其内容如下:
#!/bin/bash
# The first argument is the file to be diff'ed.
# The second argument is a directory where the diff output can be stored.
first="$1"
diffoutout_dir="$2"
second="${first/sampleWith/sampleWithout}"
diffoutput_file="$diffoutput_dir"/$(basename "$first").out
diff "$first" "$second" > "$diffoutput_file"
使用find
和diff.sh
在目录/tmp/diff-output
中获得所需的结果。
find sampleWith -type f -exec ./diff.sh {} /tmp/diff-output \;