根据哈希值复制目录中的所有唯一文件

时间:2013-11-26 21:52:53

标签: linux bash shell deduplication

file=$3
#Using $3 as I am using 1 & 2 in the rest of the script[that works]
file_hash=md5sum "$file" | cut -d ' ' -f l
#generates hashes for file

for a in /path/to/source/* #loop for all files in directory
do
    if [ "$file_hash" == $(md5sum "$a" | cut -d ' ' -f l) ]:
    #if the file hash is equal to the hash generated then file is copied to path/to/source
    then cp "file" /path/to/source/*
    else cp "$file" "file.JPG" mv "file.JPG" /path/to/source/$file #otherwise the file renamed as file.JPG so it is not overwritten
    fi 
done 

任何人都可以帮我这个代码吗? 我正在尝试在Bash中编写一个脚本,它会为目录中的所有文件生成哈希值,如果有两个重复的哈希值,那么只有一个图像被复制到目标目录,任何人都可以看到我出错的地方这里吗?

我必须使用md5sum,所以不幸的是没有其他sha1s,fdupes或类似的东西。

1 个答案:

答案 0 :(得分:2)

假设复制哪个唯一文件无关紧要,一个简单的方法就是使用bash对关联数组的支持:

declare -A files

while read hash name
do
    files[$hash]=$name
done < <(md5sum /path/to/source/*)

cp "${files[@]}" /path/to/dest

任何具有相同哈希值的文件都会覆盖前一个文件的记录,只留下数组中的唯一文件。