2016년 5월 15일 일요일

script: 파일 생성일로 파일명 변경

사진의 경우, 촬영 정보를 사용하여 파일 이름을 바꿔주는 툴이 많다.
동영상은 그런 툴이 없는듯 하다.

파일 생성일로 파일명을 바꿔준다. 
--------------------------------------------------------------------------------
#! /bin/bash

verbose=true
try_count=10

ext_list=(
        #extention, description
        "jpg,JPEG image data"
        "png,PNG image data"
        "mov,ISO Media, Apple QuickTime movie"
        # Add more
)

get_name()
{
        stat "$1" |
        sed -n '/Birth:/{s/^\s*Birth:\s*//;s/\(.\{22\}\).*/\1/;s/:/-/g;s/[ .]/_/g;p}'
}

find_next_name()
{
        for i in `seq 1 $try_count`; do
                [ -f "$1_$i.$2" ] || {
                        echo "${1}_$i"
                        return
                }
        done
}

find_ext()
{
        local EXT="${1##*.}"
        [ -z "$EXT" ] && {
                for i in "${ext_list[@]}"; do
                        desc="${i#*,}"
                        file $1 | grep -qw "$desc" && {
                                EXT="${i%%,*}"; break
                        }
                done
        }
        echo "$EXT"
}

ls -1 |
while read f; do
        [ -f "$f" ] || continue

        name=$(get_name "$f")
        ext=$(find_ext "$f")

        [ "$f" = "$name.$ext" ] && {
                [ $verbose = true ] && echo "'$f' is already changed"
                continue
        }

        [ -f "$name.$ext" ] && name=$(find_next_name "$name" "$ext")

        if [ -z "$name" ]; then
                echo "$f: too many files with same name. Use larger try_count"
        else
                [ $verbose = true ] && echo "mv '$f' '$name.$ext'"
                mv "$f" "$name.$ext"
        fi
done
--------------------------------------------------------------------------------