比较列表中的文件

比较列表中的文件

我有一个文件列表(<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

(假设文件路径不包含换行符)这将为您提供每个文件的校验和(和大小),让您轻松查看哪些文件是相同的。

您可以替换cksummd5sum/// shasum(如果可用sha512sumsha3sum,并且您担心潜在的校验和冲突。

答案3

使用返回值

diff file1 file2 >/dev/null

因为当文件相同时它返回零,当文件不同时它返回非零。

比较两个嵌套循环中的文件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

asdiff -q打印第一个方法本身的消息。

答案4

使用下面的命令安装 fdupes 包yum install fdupes*

然后使用以下命令查找相同的文件或重复的文件是指具有相同内容的文件

fdupes path

在当前路径中它将显示所有相同或重复的文件

相关内容