yuyunko's blog

ぼうびろく

重複ファイル削除

先ほどの記事にてexiftoolで
写真の整理を行う方法を書いたが、この方法だとたくさんの重複ファイルが出来る可能性が
ある。

そこでmd5sumを用いて重複ファイルの整理を行うスクリプトを書いた。

#!/bin/bash

# tmp_dir
TMP_DIR=_TMP_DELETE_FILES_
TMP_FILE=_TMP_ONLY_UNIQ_LIST_

if [ ! -d ${TMP_DIR} ]; then
    mkdir ${TMP_DIR}
fi

find . -type f -maxdepth 1 -print0 | xargs -0 -I{} mv -iv {} "${TMP_DIR}"
cd "${TMP_DIR}"

find . -type f -maxdepth 1 -print0 | xargs -0 md5sum >> ${TMP_FILE}
sort -rk 1 ${TMP_FILE} | uniq -w 32 | cut -d ' ' -f 3- | while read UNIQ_MD5_FILE
do
    mv -iv "${UNIQ_MD5_FILE}" ../
done

cd ../

rm ${TMP_FILE}

重複ファイルのあるディレクトリでこのスクリプトを実行すると、_TMP_DELETE_FILES_というディレクトリ
が作成され、その中に重複ファイルが入る。
後はそのディレクトリを丸ごと削除すればおk


yyyy-mm ディレクトリがたくさんある場合、for文で全てに実行出来る。
上記のスクリプトをOnlyUniqFile.shという名前で~/に保存したとすると、

$ cd ~/Pictures
$ for i in *
$ do
$ cd "$i"
$ ~/OnlyUniqFile.sh
$ cd ../
$ done

これで全てのディレクトリに_TMP_DELETE_FILES_というディレクトリが出来て、
その中に重複ファイルが格納される。
全て削除するには、

$ find ~/Pictures -name "_TMP_DELETE_FILES_" -exec rm -rf {} +

で出来る。