LoginSignup
2
2

More than 5 years have passed since last update.

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

Posted at

概要

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

ファイル名のフォーマットを指定し,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

参考サイト

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2