ダウンロードしてきた画像のファイル名は、デジカメで撮影した画像のそれと違って、特に意味を持ちません。ほとんどの場合、画像が掲載されていたウェブサイトの管理者やCGIが勝手に付けた名前である事が多いわけです。
そんなファイルがいくつも貯まっていくと、整理にもひと苦労です。そこで、ファイル名を MD5 のハッシュ値にしておけば、重複したファイルを整理する事が出来ます。以下に例を示します。
#!/bin/sh # coding: utf-8 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
このスクリプトは、シェル展開と組み合わせて、以下のように使います。
# JPEG画像を一括リネーム $ md5name ./image/neta/*.jpg
名前が重複(=つまり、ファイル内容が完全に一致)したものは上書きされるため、結果、重複したファイルを削除することになります。
-w | リネームを対話的に確認する |
-f | リネーム後のファイル名を吐くだけ |
-z | サイズがゼロのファイルも処理する |
-x | サイズがゼロのファイルは削除する |
-d | 出力ディレクトリを指定する |
-c | リネームではなくコピーする |
-v | バージョン情報 |
-h | ヘルプ |
こんなオプションを使えるようにしたら、需要が出てくるかなあ。
2016/05/08 追記
ファイル名に半角スペースが入っていた場合でも正しく処理できるような修正を、コメントにて狸おやじさんよりいただきました。スクリプトを差し替えておきました。
※ 2020/07/02 度重なるブログ移転・ブログシステムのアップデートにより崩れた記事を校正。
情報ありがとうございます。大変助かりました。
空白入りファイル名に対応した改善版をお返しします。
#!/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
狸おやじさん
おお、ありがとうございます!
2010年の古い記事なので、Githubに置いてスクリプトを差し替えておきます。