現在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