2016-08-11 2 views
0

나는 엄청난 수의 HTML 파일이 담긴 두 개의 폴더가 있으며 각 파일을 비교하고 쉘 스크립트/유닉스 명령을 사용하여 각 파일의 diff를 얻는 방법을 알고 싶다.유닉스에서 html 파일을 비교하는 방법

예 :
디렉토리 1 :

 
1.html 
2.html 
3.html 

디렉토리 2 :

나는 등 dir2에서 1.html2.html2.html과 함께 디렉토리에 1.html을 비교하려는
 
1.html 
2.html 
3.html.. 

.

답변

0

comm 명령을 사용하여 정렬 된 파일을 비교할 수 있습니다. 이것은 당신이 찾고있는 실제 해결책 일 것입니다.

구문 : comm file1 file2

는 정렬 된 파일을 비교 FILE1 및 FILE2 줄 단위. 옵션을 지정하지 않으면 comm이 3 열 출력을 생성합니다. 1 열은 FILE1에 고유 한 행을 포함하고 2 열은 FILE2에 고유 한 행을 포함하고 3 열은 두 파일에 공통 인 행을 포함합니다. 각 열은 옵션을 사용하여 개별적으로 표시하지 않을 수 있습니다.

comm 명령을 필요한 디렉토리의 모든 파일을 비교하는 루프로 유지하십시오.

당신이 파일을 수동으로 하나씩을 비교하려면 : 당신은 두 개의 파일 사이의 디스플레이 라인 별 차이 DIFF 명령을 사용할 필요가

.

구문 : diff path/FILE1 path/FILE2

당신은 필요한 데이터를 필터링 할 --changed 그룹-형식과 --unchanged 그룹 형식의 옵션을 사용할 수 있습니다.

다음 세 가지 옵션은 각 옵션에 대한 관련 그룹을 선택하는 데 사용할 수 있습니다

'% <'FILE1 에서 라인을 얻을 '%>'에서 선을 제거 FILE2 ''(빈 문자열)에서 라인을 얻을 두 파일.

예 : diff --changed-group-format="%<" --unchanged-group-format="" file1 file2

는 명령 아니면 sdiff 사용하여 두 개의 텍스트 파일 사이에 분명한 시각 차이를 얻을 수 있습니다

:

구문 : sdiff path/file1 path/file2

당신이 정력 편집기 사용을 설치 한 경우 : vim -d file1 file2

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 

예 : 상세한 답변에 대한

[email protected]:/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 


[email protected]:/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 .. 


[email protected]:/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 .. 
+0

감사합니다. 어떻게 다른 라인 내용을 얻을 수 있을까요? –

+0

코드에서 "#diff $ file $ 2/$ fileName"주석 처리를 제거해야합니다. –

관련 문제