저는 5개의 다른 장소에서 정보를 얻고 그 차이점을 비교하는 스크립트를 작성하려고 합니다. 정보는 IP 주소일 뿐이며 이를 텍스트 파일에 넣었습니다. 나는 다음을 사용하고 있습니다 :
diff --from-file file1 file2 file3 file4 file5
비교하면 작동하지만 어떤 파일에 다른 정보가 포함되어 있는지 표시해야 합니다. 일치하지 않는 파일은 최대 1개 또는 최대 2개일 것으로 예상됩니다.
답변1
-u
diff 형식을 균일 또는 으로 변경하면 --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(파일 이름)는 사용되지 않습니다.