はじめに
仕事でlsの結果をファイル出力するシェルを作成したので、記録しておく。
コード
cat LS_FILE_LIST'#1)初期処理ARRAY="\
${HOME}/sh/a \
${HOME}/sh/b \
${HOME}/sh/c"
LENGTH=`echo ${ARRAY} | tr ' ' '\n' | wc -l`CURRENT=`pwd`
’#2)ログを格納するフォルダを作成if [ ! -e ${CURRENT}/log ];then
echo ${CURRENT}/log
mkdir ${CURRENT}/log
else
rm -rf ${CURRENT}/log/*
fi
’#3)配列をループさせて段階的にlsのデータをファイル出力
for I in `seq ${LENGTH}`
do
DATA=`echo ${ARRAY} | cut -d ' ' -f $I`
cd "$DATA"
NAME=`echo ${DATA} | tr '/' '_'`
echo ${DATA} | tee ${CURRENT}/log/0${I}${NAME}.log
ls -l | grep -v "^d" | grep -v "^合計"| awk -F" " '{print $0,$5,$9}' \
| tee -a tee ${CURRENT}/log/0${I}${NAME}.log
done
exit 0
コード説明
1)初期処理を実施。
1)初期処理
・「ls」のリストを表示させたいフォルダを設定する。
・ここでは記載の3つ。
「${HOME}/sh/a」「${HOME}/sh/b」「${HOME}/sh/c」
・配列の個数を格納。bashでは簡単に配列定義をできるが、bシェルでは。。。仕方なく。
2)ログを格納するフォルダ
・ログを格納するフォルダを定義。
・「log」フォルダが存在しない場合は、ログフォルダを作成。
・「log」フォルダが存在する場合は、中に入っているファイルを全て削除。
3)メインの処理
・ループにて配列に内容を順次処理。配列の内容は初期処理で定義したフォルダ
・変数「I」がループの変数(回数)。初期処理で格納した配列個数が終了条件。
・「cd」にディレクトリを移動。最初に移動したディレクトリをログの1行目に出力。
・「ls」を発行し、ログに出力。その際、「ファイル名」と、「ファイルサイズ」は、awkにて分解。
・終了条件である、定義したフォルダの個数分、処理を繰り返す。