NSRLJP Script

現在NSRLJPを生成する際には手製の簡易スクリプト(gen_nsrljp.sh)を使ってRDS v2形式の結果を作成しています。スクリプトに圧縮系のファイルの展開を組み込む処理は実装しておらず、別のツールを使うなどして事前に展開しています。NSRLFile.txtの作成手順は以下の通りです。

$ bash gen_nsrljp.sh -p 製品コード -o OSコード 取得対象ディレクトリ > NSRLFile.txt

製品コードやOSコードを記載したNSRLMfg.txt, NSRLOS.txt, NSRLProd.txtは事前に手動で作っており、それらの製品コード、OSコードをオプションで指定してスクリプトを実行します。

gen_nsrljp.sh

#!/bin/bash
# gen_nsrljp.sh - generate NSRLFile.txt compatible file on macOS/Linux
# version 0.2
# http://www.kazamiya.net/nsrljp

COMMAND=`basename $0`
# default
PCODE="0"
# default 
OPCODE="0"

# process argument
if [ $# -eq 0 ]; then
  echo "Usage: $COMMAND [-hv] [[-p] pcode] [[-o] opcode] targetdir" 1>&2
  exit 0
fi

while getopts hvp:o: option
do
    case "$option" in
    h)
        echo "Usage: $COMMAND [-hv] [[-p] pcode] [[-o] opcode] targetdir" 1>&2
        exit 0
        ;;
    v)
        echo "version 0.2"
        exit 0
        ;;
    p)
	PCODE=$OPTARG
	;;
    o)
	OPCODE=$OPTARG
	;;
    *)
        echo "Usage: $COMMAND [-hv] [[-p] pcode] [[-o] opcode] targetdir" 1>&2
        exit 0
    esac
done
shift $(($OPTIND - 1))

# process argument
if [ -d $@ ]; then
  TARGETDIR=$@
else
  echo "$@ is NOT a directory"
  exit 1
fi

OS_TYPE=$(uname)
if [ "$OS_TYPE" != "Darwin" ] && [ "$OS_TYPE" != "Linux" ]; then
    echo "The script doesn't support on $OS_TYPE"
    exit 1
fi

find $TARGETDIR -type f -print | while read LINE
do
    FILE="$LINE"
    FILENAME=`basename "${FILE}"`
    if [ "$OS_TYPE" = "Darwin" ]; then
      SHA1=`shasum "$FILE" | awk '{print $1}'`
      MD5=`md5 "$FILE" | awk -F" = " '{print $2}'`
    else
      SHA1=`sha1sum "$FILE" | awk '{print $1}'`
      MD5=`md5sum "$FILE" | awk '{print $1}'`
    fi
    CRC=`cksum "$FILE" | awk '{print $1}'`
    CRC32=`printf %08X $CRC`
    SIZE=`wc -c "$FILE" | awk '{print $1}'`
    echo "\"$SHA1\",\"$MD5\",\"$CRC32\",\"$FILENAME\",$SIZE,$PCODE,\"$OPCODE\",\"\"\r"
done
タグ