概要
大量の連番のファイルがあったとき,途中の番号が抜けているかを目で確認するのは面倒です.
それを確認するシェルスクリプトを作成しました.
ファイル名のフォーマットを指定し,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