我正在尝试清理照片转储文件夹,其中有几个文件重复但文件名不同或丢失在子文件夹中。
我研究过 rmlint、duff 和 fdupes 等工具,但似乎找不到让它们只保留最新时间戳的文件的方法。我怀疑我必须对结果进行后处理,但我甚至不知道从哪里开始做这件事。
有人能指导我如何获取重复文件列表并删除除最新文件之外的所有内容吗?
答案1
请注意,我使用的是 zsh shell。
尝试以下类似操作(未经测试;基于https://github.com/lipidity/btrfs-fun/blob/master/dedup):
# checksum everything in ${DIR}
cksums=$(mktemp)
find ${DIR} -xdev -type f -print0 | xargs -0 md5sum > $cksums
# loop through each md5 hash found
for hash in $(sort $cksums | uniq -w 32 -d | cut -c 1-32); do
# list of files with this hash
files=$(grep $hash $cksums | cut -c 35-)
f=(${(f)files})
unset files
# $f now contains array of files with the same checksum
# compare the first file to the rest, deleting any that are older
newest=$f[1]
for file in $f[2,-1]; do
# make sure the files are still the same
cmp $newest $file || continue
# remove the older file
if [[ $file -nt $newest ]]; then
rm $newest
newest=$file
else
rm $file
fi
done
done
未经测试,但应该可以帮到你大部分。如果需要进一步解释,请告诉我。
答案2
我会使用命令和每个文件的文件名echo
生成校验和,然后按校验和排序。您可以使用 检查那些具有相同校验和的文件是否确实是重复的。sum
cmp