ファイル名をMD5ハッシュ値にし、ファイルの重複を防止するやつ

ネットで拾ってきた画像のファイル名は、デジカメで撮影した画像のそれと違って、特に意味を持ちません。ほとんどの場合、画像が掲載されていたウェブサイトの管理者やCGIなどが勝手に付けた名前である事が多いわけです。

そんなファイルがいくつも貯まっていくと、整理にもひと苦労です。そこで、ファイル名を MD5 のハッシュ値にしておけば、重複したファイルを整理する事が出来ます。以下に例を示します。

このスクリプトは、シェル展開と組み合わせて、以下のように使います。

# ネタ画像(JPEG)を一括リネーム
$ md5name ./image/neta/*.jpg

名前が重複(=つまり、ファイル内容が完全に一致)したものは上書きされるため、結果、重複したファイルを削除することになります。

-w リネームを対話的に確認する
-f リネーム後のファイル名を吐くだけ
-z サイズがゼロのファイルも処理する
-x サイズがゼロのファイルは削除する
-d 出力ディレクトリを指定する
-c リネームではなくコピーする
-v バージョン情報
-h ヘルプ

こんなオプションを使えるようにしたら、需要が出てくるかなあ。

2016/05/08 追記

ファイル名に半角スペースが入っていた場合でも正しく処理できるような修正を、コメントにて狸おやじさんよりいただきました。スクリプトを差し替え、Gist に置いておきました。

ファイル名をMD5ハッシュ値にし、ファイルの重複を防止するやつ」への2件のフィードバック

  1. 情報ありがとうございます。大変助かりました。
    空白入りファイル名に対応した改善版をお返しします。
    #!/bin/sh
    if [ $# -gt 0 ]; then
    for file in “$@”
    do
    if [ -f “$file” -a -s “$file” ]; then
    # Get file extention
    ext=`basename “$file” | sed ‘s/^.*\.\(.*\)$/\1/gi’`;
    if [ “$file” == $ext ] ; then
    ext=””;
    else
    ext=”.$ext”;
    fi
    # Make new file name
    nfile=`dirname “$file”`/`md5sum “$file” | cut -c -32`$ext;
    # echo $file to $nfile
    mv “$file” $nfile
    fi
    done
    else
    cat <<EOUSG
    md5name – Rename the file with md5sum string.
    By dyama=members.fsf.org 2010.
    Usage:
    $0 File […]
    EOUSG
    fi

コメントを残す

メールアドレスが公開されることはありません。