删除重复的图像文件

删除重复的图像文件
[user@notebook foobar]$ ls *.jpg|wc -l
1959
[user@notebook foobar]$ cksum * | cut -d' ' -f-2 | sort | uniq -di | wc -l
698
[user@notebook foobar]$ 

一个目录下有很多jpg文件。许多文件都是重复的,但如果它们的 cksum 相同,我可以找出它们。有时同一张图片有 2 或 3 个文件。

问:如何删除不需要的重复项?

我需要从每张图片中留下1张,所以如果有3张完全相同但文件名不同的图片,只应保留其中之一,这样就不会出现重复的图片了,怎么办呢?

答案1

使用 fdupes:

fdupes -dN .

男人 fdupes:

   -d --delete
          prompt user for files to  preserve,  deleting  all  others  (see
          CAVEATS below)

   -N --noprompt
          when  used  together  with  --delete, preserve the first file in
          each set of duplicates and delete the others  without  prompting
          the user

答案2

该脚本在 bash 中使用关联数组来保存校验和,然后报告重复项;如果看起来不错,则将其更改echo为 be (如果更偏执,则将其更改为):rmrm -i

#!/usr/bin/env bash
declare -A sums
for f in *
do
  if [[ ! -f "$f" ]]; then continue; fi
  c=$(cksum "$f" | awk '{print $1}')
  [[ -n "${sums[$c]}" ]] && echo "# rm \"$f\" -- duplicate of ${sums[$c]}"
  sums[$c]="$f"
done

相关内容