일부 명령의 출력으로 파일 목록(<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
로 바꿀 수 있으며 잠재적인 체크섬 충돌이 우려됩니다.md5sum
shasum
sha512sum
sha3sum
답변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
현재 경로에 동일하거나 중복된 파일이 모두 표시됩니다.