如何在Synology NAS目录树中高效可靠地查找相同文件?
识别Synology NAS目录树中重复文件的方法
先修正你原命令的问题
你的bash命令没输出的核心原因是:uniq -d是整行去重,但md5sum的输出是「哈希值 文件路径」,即使两个文件哈希相同,文件路径不同就会导致整行不同,uniq -d无法识别为重复项。
修正后的命令可以先提取哈希值和文件路径,分组后筛选出哈希出现多次的条目,再列出对应的文件:
basedir=/volume1/bordel find "$basedir" -type f -exec md5sum {} + | sort -k1,1 | awk '{hash=$1; $1=""; files[hash] = files[hash] $0 "\n"} END {for(h in files) {split(files[h], arr); if(length(arr)>1) print h "\n" files[h]}}'
这个命令会把相同哈希的文件路径归在一起,只输出存在重复的哈希及对应的所有文件。
更高效的实现方案
直接计算所有文件的哈希效率很低,尤其是大文件较多时。更合理的逻辑是先按文件大小过滤——只有大小完全相同的文件才有可能是重复文件,再对这些文件计算哈希:
basedir=/volume1/bordel # 第一步:按文件大小分组,筛选出大小重复的文件 find "$basedir" -type f -printf "%s %p\n" | sort -n | awk '{size=$1; $1=""; paths[size] = paths[size] $0 "\n"} END {for(s in paths) {split(paths[s], arr); if(length(arr)>1) print s "\n" paths[s]}}' > /tmp/same_size_files.txt # 第二步:对每个大小组内的文件计算哈希,找出重复 while read -r size; do read -r -a files printf "%s\n" "${files[@]}" | xargs md5sum | sort -k1,1 | awk '{hash=$1; $1=""; files[hash] = files[hash] $0 "\n"} END {for(h in files) {split(files[h], arr); if(length(arr)>1) print "重复哈希:" h "\n文件列表:" files[h]}}' done < /tmp/same_size_files.txt rm /tmp/same_size_files.txt
Synology NAS专属工具推荐
Synology自带的File Station有内置的重复文件查找功能,操作更直观:
- 打开File Station,进入目标目录
- 点击顶部「操作」→「查找重复文件」
- 可按文件名、大小、内容等条件筛选,无需命令行即可完成查找。
内容的提问来源于stack exchange,提问作者Fravadona
相关产品推荐
相关产品推荐

