删除重复文件,仅保留最新文件

删除重复文件,仅保留最新文件

我正在尝试清理照片转储文件夹,其中有几个文件重复但文件名不同或丢失在子文件夹中。

我研究过 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生成校验和,然后按校验和排序。您可以使用 检查那些具有相同校验和的文件是否确实是重复的。sumcmp

相关内容