我有两个包含大量HTML文件的文件夹,我想比较每个文件以及如何使用shell脚本/ unix命令获取每个文件的差异。
例:
目录1:
1.html 2.html 3.html
目录2:
1.html 2.html 3.html..
我想将目录中的1.html
与1.html
中的dir2
进行比较,将2.html
与2.html
进行比较,依此类推。
答案 0 :(得分:1)
试试这个;
#!/bin/bash
for file in $1/*.html; do
fileName=$(basename "$file")
if [ ! -f $2/$fileName ]; then
echo $fileName " not found! in "$2
else
difLineCount=$(diff $file $2/$fileName | wc -l)
if [ $difLineCount -eq 0 ]; then
echo $file "is same " $2/$fileName;
else
echo $file "is not same " $2/$fileName "." $difLineCount "lines are different";
#diff $file $2/$fileName
fi
fi
done
for file in $2/*.html; do
fileName=$(basename "$file")
if [ ! -f $1/$fileName ]; then
echo $fileName " not found! in "$1
fi
done
前:
user@host:/tmp$ ./test.sh Directory_1 Directory_2
Directory_1/1.html is same Directory_2/1.html
Directory_1/2.html is same Directory_2/2.html
Directory_1/3.html is not same Directory_2/3.html . 4 lines are different
4.html not found! in Directory_2
5.html not found! in Directory_1
user@host:/tmp$ ls -alrt Directory_1/
total 20
-rw-rw-r-- 1 user user 6 Ağu 11 13:28 1.html
-rw-rw-r-- 1 user user 6 Ağu 11 13:28 2.html
-rw-rw-r-- 1 user user 6 Ağu 11 13:28 3.html
-rw-rw-r-- 1 user user 0 Ağu 11 13:41 4.html
drwxrwxr-x 2 user user 4096 Ağu 11 13:41 .
drwxrwxr-x 4 user user 4096 Ağu 11 13:48 ..
user@host:/tmp$ ls -alrt Directory_2/
total 20
-rw-rw-r-- 1 user user 7 Ağu 11 13:28 3.html
-rw-rw-r-- 1 user user 6 Ağu 11 13:28 2.html
-rw-rw-r-- 1 user user 6 Ağu 11 13:28 1.html
-rw-rw-r-- 1 user user 0 Ağu 11 13:44 5.html
drwxrwxr-x 2 user user 4096 Ağu 11 13:44 .
drwxrwxr-x 4 user user 4096 Ağu 11 13:48 ..
答案 1 :(得分:0)
您可以使用comm命令比较已排序的文件。这可能是您正在寻找的实际解决方案。
语法:comm file1 file2
逐行比较已排序的文件FILE1和FILE2。 没有选项,comm产生三列输出。第一列包含FILE1特有的行,第二列包含FILE2特有的行,第三列包含两个文件共有的行。可以使用选项单独抑制这些列中的每一列。
将comm命令保持在循环中,以便比较所需目录中的所有文件。
如果您想手动逐个比较文件:
您需要使用diff命令显示两个文件之间的逐行差异。
语法:diff path/FILE1 path/FILE2
您可以使用--changed-group-format和--unchanged-group-format选项来过滤所需的数据。
以下三个选项可用于为每个选项选择相关组:
'%<'从FILE1获取行 '%>'从FILE2获取行 ''(空字符串)用于从两个文件中删除行。
示例:diff --changed-group-format="%<" --unchanged-group-format="" file1 file2
您可以使用命令sdiff:
在两个文本文件之间获得明确的视觉差异语法:sdiff path/file1 path/file2
如果安装了vim编辑器
使用:vim -d file1 file2