Images

去重圖像文件

  • November 14, 2016
[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 張完全相同但文件名不同的圖片,則應該只保留其中一張,這樣就不會出現重複的圖片,該怎麼做?

使用 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

該腳本在 bash 中使用關聯數組來保存校驗和,然後報告重複項;如果它看起來不錯(或者更偏執) ,則將其更改echo為:rm``rm -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

引用自:https://unix.stackexchange.com/questions/323278