목록의 파일 비교

목록의 파일 비교

일부 명령의 출력으로 파일 목록(<10)이 있습니다. 예를 들어:

$ find foo* -name bar*Test.groovy

foofoo/foo-tasks/src/test/groovy/foo_main/store/barEarthTest.groovy
foo-co/foo-tasks/src/test/groovy/foo_main/store/barMercuryTest.groovy
foo_ba/foo-tasks/src/test/groovy/foo_main/store/barMarsTest.groovy
foo_tr/foo-tasks/src/test/groovy/foo_main/store/barMarsTest.groovy
foo_P1/foo-tasks/src/test/groovy/foo_main/store/barJupiterTest.groovy
foo_P2/foo-tasks/src/test/groovy/foo_main/store/barTatooineTest.groovy

이 파일들 중 어떤 것이 같고 어떤 것이 다른지 알고 싶습니다. 나는 구체적인 차이점이 무엇인지 상관하지 않습니다.

이 정보를 보다 편리한 형태로 얻으려면 어떻게 해야 합니까?

답변1

다음과 같이 대부분의 작업을 수행하는 몇 가지 코드가 있습니다.레플리카 뒤퓌 찾다 푸딩

몇 년 전 나는 fdupes와 rdfind의 비교 실행을 다음 사이트에 게시했습니다.http://www.linuxforums.org/forum/programming-scripting/195467-find-same-size-file.html#post924892

이 4가지에 대한 세부정보는 다음과 같습니다.

fdupes  finds duplicate files in a given set of directories (man)
Path    : /usr/bin/fdupes
Version : 1.51
Type    : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Help    : probably available with -h,--help
Repo    : Debian 8.9 (jessie) 
Home    : http://code.google.com/p/fdupes/ (pm)

jdupes  finds and performs actions upon duplicate files (man)
Path    : ~/executable/jdupes
Version : 1.5.1 (2016-11-01)
Type    : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Home    : https://github.com/jbruchon/jdupes (doc)

rdfind  finds duplicate files (man)
Path    : /usr/bin/rdfind
Version : 1.3.4
Type    : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Repo    : Debian 8.9 (jessie) 
Home    : http://rdfind.pauldreik.se/ (pm)

duff    duplicate file finder (man)
Path    : /usr/bin/duff
Version : 0.5.2
Type    : ELF 64-bit LSB executable, x86-64, version 1 (SYS ...)
Repo    : Debian 8.9 (jessie) 
Home    : http://duff.sourceforge.net/ (pm)

베스가 소원을 빌어요... 건배, drl

답변2

다음을 수행할 수 있습니다.

find foo* -name 'bar*Test.groovy' -type f -exec cksum {} + | sort

(파일 경로에 개행 문자가 포함되어 있지 않다고 가정) 이렇게 하면 각 파일의 체크섬(및 크기)이 제공되므로 어떤 파일이 동일한지 쉽게 확인할 수 있습니다.

가능한 경우 /// cksum로 바꿀 수 있으며 잠재적인 체크섬 충돌이 우려됩니다.md5sumshasumsha512sumsha3sum

답변3

반환 값 사용

diff file1 file2 >/dev/null

파일이 동일하면 0을 반환하고 파일이 다르면 0이 아닌 값을 반환하기 때문입니다.

두 개의 중첩 루프에서 파일을 비교합니다 for. 다음과 같이:

for file1 in $(COMMAND)
do
    for file2 in $(COMMAND)
    do
        if ! diff "${file1}" "${file2}" > /dev/null 2>&1
        then
            echo "${file1} and ${file2} differ"
        fi
    done
done

또는 Stéphane Chazelas가 제안한 것처럼 단순화할 수 있습니다.

for file1 in $(COMMAND)
do
    for file2 in $(COMMAND)
    do
        diff -q "${file1}" "${file2}"
    done
done

as는 diff -q첫 번째 메소드 자체의 메시지를 인쇄합니다.

답변4

다음 명령을 사용하여 fdupes 패키지를 설치하십시오.yum install fdupes*

그런 다음 다음 명령을 사용하여 동일한 파일을 찾거나 중복 파일은 동일한 내용을 가진 파일을 의미합니다.

fdupes path

현재 경로에 동일하거나 중복된 파일이 모두 표시됩니다.

관련 정보