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