Linux 基于md5哈希值比较两个文件

Linux 基于md5哈希值比较两个文件,linux,bash,shell,sh,Linux,Bash,Shell,Sh,我正在使用find命令查找格式为“DGT_???.JPG”的文件。我试图让下面的脚本记录源目录中具有相同名称和相同哈希的任何文件的绝对路径(如果它与目标目录中的文件匹配)。我还想确保这些文件没有从源目录复制到目标目录。然后我想将它们记录到一个名为“dups.txt”的新文本文件中。在网上似乎找不到明确的答案,所以我才发布这个问题。谢谢,对Linux来说是相当新的 我的代码在下面 #!/bin/sh clear SRC="$1" DEST="$2" if [ "$#" -eq 0 ]; then

我正在使用find命令查找格式为“DGT_???.JPG”的文件。我试图让下面的脚本记录源目录中具有相同名称和相同哈希的任何文件的绝对路径(如果它与目标目录中的文件匹配)。我还想确保这些文件没有从源目录复制到目标目录。然后我想将它们记录到一个名为“dups.txt”的新文本文件中。在网上似乎找不到明确的答案,所以我才发布这个问题。谢谢,对Linux来说是相当新的

我的代码在下面

#!/bin/sh
clear
SRC="$1"
DEST="$2"

if [ "$#" -eq 0 ]; then
    echo "two arguments required"
fi

if [ ! -d "$SRC" ]; then
    echo "Source directory does not found"

fi


if [ ! -d "$DEST" ]; then
    mkdir "$DEST"
fi


for image in $(find "$SRC" -type f -iname DGT_[0-9][0-9][0-9][0-9].JPG)
do
    md5sum=$(md5sum < "$image")        
    for duplicate in "$DEST"  
    do
        [ "$image" = "$duplicate" ] && continue      
        [ "$md5sum" = "$(md5sum < "$duplicate")" ] >> dups.txt  
    done
    cp --backup --suffix=.JPG     "$image" "$DEST"
done
#/垃圾箱/垃圾箱
清楚的
SRC=“$1”
DEST=“$2”
如果[“$#”-等式0];然后
回显“需要两个参数”
fi
如果[!-d“$SRC”];然后
echo“未找到源目录”
fi
如果[!-d“$DEST”];然后
mkdir“$DEST”
fi
对于$中的图像(查找“$SRC”-类型f-iname DGT_uUt[0-9][0-9][0-9][0-9].JPG)
做
md5sum=$(md5sum<“$image”)
对于“$DEST”中的副本
做
[“$image”=“$duplicate”]&继续(&C)
[“$md5sum”=“$(md5sum<“$duplicate”)”]>>dups.txt
完成
cp—备份—后缀=.JPG“$image”“$DEST”
完成

jgot8-我实际上认为给出的任务指定您应该将这些重复匹配保存在名为duplicates.txt的文件中,而不是dupes.txt

我相信,当我与您讨论这个问题时,您将能够充分解释这些概念,以便奖励您的35%

我们将在明天上午9点讨论这个问题


-吉姆

这与你的计划有什么不同?在
dups.txt
创建中,我现在试图找到同样具有相同哈希值的副本,它们不会复制并记录在名为dups.txt的新文本文件中。我的最后一个问题是查找和复制所有具有该格式的文件,并将副本附加到“.JPG”中。您绝对不希望针对每个新文件在目标目录中的每个文件上运行
md5sum
。那太贵了。您希望将值存储在一个数组中(如果您有bash 4+,则为关联数组),并与之进行比较。此时不要过于关注这一点。只想将重复的绝对路径名(文件名和散列值)记录到txt文件中,而不复制到目标文件夹。@DavidC.Rankin,嗯?正在调用的命令是
md5sum
,而不是
$md5sum
。我同意名称空间冲突会给读者带来困惑,但并不是说有可能出现与相同名称空间相关的真正bug;如果shell是一个LISP,那么它将是一个LISP-2,而不是LISP-1。