未分類

【sh】lsの結果をファイルに出力する

はじめに

仕事で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にて分解。

・終了条件である、定義したフォルダの個数分、処理を繰り返す。

-未分類