lsコマンドの結果をタブ区切りで出力するシェルスクリプト

unixのファイル一覧表示コマンド「ls」コマンドの結果から必要な情報だけ表示されるように整形して、エクセル等で使い易いようにタブ区切りでファイル出力するシェルスクリプト。

#!/usr/bin/sh
#
# 処理内容
#  ①引数に指定したパスディレクトリから
#    サブディレクトリ配下のファイルも含めて一覧出力
#
#  ②一覧出力する際、ファイルのタイムスタンプを
#    yyyy/mm/dd HH:MM:SS 形式で表示するよう指定
#
#  ③先頭行にヘッダー行を追加
#
#  ④lsコマンドの出力結果から「合計」行などの
#    不要な情報を除外
#
#  ⑤出力結果をヘッダー行の項目に合わせて
#    列を並べ替えて出力
#
#  ⑤各列をタブ区切りで出力
#

# ファイル一覧を取得したいディレクトリのパスを取得
if [ "$1" != "" ]
then
  # 引数が指定されていた場合、引数からパスを取得
  LSDIR=$1
else
  #引数の指定が無い場合、カレントディレクトリのパスを取得
  LSDIR=`pwd`
fi

echo "以下のディレクトリ配下からファイル一覧を取得します。"
echo $[LSDIR]
echo " "

# ワーク変数
WK1=''

# 出力ファイル名設定
LIST="LIST_`date +'%Y%m%d_%H%M%S'`.txt

# ヘッダー出力
echo -e "パス"'\t'"ファイル名"'\t'"パーミッション"'\t'"サイズ"'\t'"タイムスタンプ" >>${LIST}

# lsコマンド実行
ls -lb -R --time-style=+'%Y/%m/%d %H:%M:%S' ${LSDIR} |
while read a b c d e f g h
  do
    if [ "$a" != "合計" ]
    then
      if [ "$a" != "" ]
      then
        WK1=`echo $a | cut -c l`
        if [ "${WK1}" == "/" ]
        then
          FILE_PATH=$a
          echo "$FILE_PATH" >> ${LIST}
        else
          # ls の結果から必要な列のみ表示
          echo -e "${FILE_PATH}"'\t'"$h"'\t'"$a"'\t'"$e"'\t'"$f"'\t'"' '"$g" >>${LIST}
        fi
      fi
    fi
done