ShellScript
Bash

連番のファイルが存在するか否かをチェックする.

More than 1 year has passed since last update.

概要

大量の連番のファイルがあったとき,途中の番号が抜けているかを目で確認するのは面倒です.
それを確認するシェルスクリプトを作成しました.

ファイル名のフォーマットを指定し,seqコマンドで連番になっているかを確認します.

スクリプトファイル

以下のスクリプトを exists などのファイルに保存し,実行権限を与えてください.

#! /bin/sh

check_range () {
    # echo "check_range($1, $2, $3, $4)"

    for i in $(seq $1 $2)
    do
        FILENAME=$(printf "$4" $i)
        if [ ! -f "$3/$FILENAME" ] ; then
            echo "$3/$FILENAME skipped"
        fi
    done
}

show_help () {
    echo "${0##*/} [OPTIONS] [FROM] <TO> <DIR...>"
    echo "OPTIONS"
    echo "  -f <FORMAT> ファイル名のフォーマットをprintf形式で指定する.デフォルトは %d."
    echo "  -h          このメッセージを表示して終了する."
    echo "ARGUMENTS"
    echo "  FROM        連番の最初の数値.デフォルトは1."
    echo "  TO          連番の最後の数値."
    echo "  DIR         調査するディレクトリのリスト."
}

FORMAT="%d"
START=1

while getopts hf: OPT
do
      case $OPT in
          "h" ) SHOW_HELP="TRUE" ;;
          "f" ) FORMAT="$OPTARG" ;;
      esac
done

shift $((OPTIND - 1))

if [ "$SHOW_HELP" = "TRUE" ] || [ $# -le 1 ]; then
    show_help
    exit 0
fi

if [ $# -ge 3 ]; then
    START=$1
    shift
fi

END=$1

while [ $# -ne 1 ]
do
    shift
    TARGET=$1

    check_range "$START" "$END" "$TARGET" "$FORMAT"
done

参考サイト