어떤 파일이 다른 파일과 다른지 표시하는 방법

어떤 파일이 다른 파일과 다른지 표시하는 방법

저는 5개의 다른 장소에서 정보를 얻고 그 차이점을 비교하는 스크립트를 작성하려고 합니다. 정보는 IP 주소일 뿐이며 이를 텍스트 파일에 넣었습니다. 나는 다음을 사용하고 있습니다 :

diff --from-file file1 file2 file3 file4 file5

비교하면 작동하지만 어떤 파일에 다른 정보가 포함되어 있는지 표시해야 합니다. 일치하지 않는 파일은 최대 1개 또는 최대 2개일 것으로 예상됩니다.

답변1

-udiff 형식을 균일 또는 으로 변경하면 --unified파일 이름이 표시됩니다.

# diff -u --from-file file1 file[2-5]
--- file1   2020-10-30 11:02:22.223269990 +0200
+++ file3   2020-10-30 11:02:35.445984702 +0200
@@ -1 +1 @@
-original
+new
--- file1   2020-10-30 11:02:22.223269990 +0200
+++ file5   2020-10-30 11:02:40.625872942 +0200
@@ -1 +1 @@
-original
+new

-q또는 와 함께 짧은 출력을 사용할 수도 있습니다 --brief.

# diff -q --from-file file1 file[2-5]
Files file1 and file3 differ
Files file1 and file5 differ

또 다른 해결책은 모든 파일에 대해 md5sum, sha1sum 등과 같은 체크섬 프로그램을 실행하고 어떤 파일이 첫 번째 파일과 다른 체크섬을 가지고 있는지 확인하는 것입니다.

GNU 시스템에서는 다음과 결합할 수도 있습니다.이와 같이:

# md5sum file* | awk '{h[$1] = h[$1] " " $2} END {for(k in h) printf("%s:%s\n", k, h[k])}'
88fa9f694690e11239096536ccf2702b: file1 file2 file4
9cd599a3523898e6a12e13ec787da50a: file3 file5

아니면 다음과 결합할 수도 있습니다.고유한이와 같이:

# hashlen=32  # MD5 outputs 32 hexadecimals
# md5sum file* | sort | uniq --group --check-chars=${hashlen}
88fa9f694690e11239096536ccf2702b  file1
88fa9f694690e11239096536ccf2702b  file2
88fa9f694690e11239096536ccf2702b  file4

9cd599a3523898e6a12e13ec787da50a  file3
9cd599a3523898e6a12e13ec787da50a  file5

FreeBSD 시스템에서는 다음과 결합할 수 있습니다.이와 같이:

# md5 file* | awk -F ' = ' '{h[$2] = h[$2] " " substr($1, index($1, "("))} END {for(k in h) printf("%s:%s\n", k, h[k])}' 
9cd599a3523898e6a12e13ec787da50a: (file3) (file5)
88fa9f694690e11239096536ccf2702b: (file1) (file2) (file4)

답변2

확산5개의 입력을 처리할 수 있습니다(sudo apt-get install diff). 매뉴얼 페이지에서:

Diffuse is a graphical tool for merging and comparing text files. Diffuse is able
to compare an arbitrary number of files side-by-side and gives users the ability
to manually adjust line matching and directly edit files.

답변3

파일이 하나만 다른 경우 다음과 같은 것을 사용할 수 있습니다.

md5sum file* | uniq -f 2

uniq -f 2필드 2(파일 이름)는 사용되지 않습니다.

관련 정보