さくらインターネット レンタルサーバー

日本語を扱う(vim nano他)

環境変数を設定する。

~/.cshrc に追加

setenv LC_CTYPE ja_JP.UTF-8
setenv LANG ja_JP.UTF-8

ls -R の出力をCSVでまとめる

元ネタは

だが、ここで語られているのは Linux の Ubuntu の話。だから何か所か訂正しないと動かない。

シェル起動

早速だが、/usr/bin/sh ではなく /bin/sh

ls の日付表記オプション。

–time-style=+’%Y/%m/%d %H:%M:%S’ という表記だが、あるいみシンプルな -D “%Y/%d/%d %H:%M:%S” に変更。

タブ区切りが上手く出力できていない

パス\tファイル名\tパーミッション\tサイズ\tタイムスタンプ という感じで\t丸出しだったので、なんとかecho でタブ出力させたがったが、上手く行かなかった。

nano でタブを挿入。

出来てくるファイルの日付表記を自分好みに

20220505みたいな連続表記から 2022-05-05 17.15.15 のようなDropbox表記に。但し、スペースを恐れてアンダーバーで繋いだ。

というわけで出来たのがこちら

#!/bin/sh
# ls-R で 整形してcsv 出力。 https://rfroml.com/2021/02/04/lsoutput/
# さんをもとに sakura internet rental server で動くように変更。
# タブの空間はタブであることを要確認。
# ファイル一覧を取得したいディレクトリのパスを取得
if [ "$1" != "" ]
then
  # 引数が指定されていた場合、引数からパスを取得
    LSDIR=$1

    else
      #引数の指定が無い場合、カレントディレクトリのパスを取得
        LSDIR=`pwd`
        fi

        # 実行シェルのパスを取得
        cd `dirname $0`
        OUTDIR=`pwd`

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

        # ワーク変数
        WK1=''

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

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

        ls -l -R  -D "%Y/%m/%d %H:%M:%S" ${LSDIR} |
        while read a b c d e f g h
          do
              # "total" の行は出力対象外
                  if [ "$a" != "total" ]; then

                        if [ "$a" != "" ]; then

                                # 1文字目を取得
                                        WK1=`echo $a | cut -c 1`

                                                if [ "${WK1}" = "/" ]; then

                                                          # 1文字目が"/"(スラッシュ)の場合は、パスとして取得
                                                                    FILE_PATH=${a%?}

                                                                            else
                                                                                      # ls の結果から必要な列のみ表示
                                                                                                echo "${FILE_PATH}"'	'"$h"'	'"$a"'	'"$e"'	'"$f"' '"$g" >>${OUTDIR}/${LIST}

                                                                                                        fi
                                                                                                              fi
                                                                                                                  fi
                                                                                                                  done

                                                                                                                  # 終了メッセージ
                                                                                                                  echo "処理結果を以下のファイルに出力しました。"
                                                                                                                  echo ${OUTDIR}/${LIST}
                                                                                                                  echo " "
                                                                                                                  

また時間が出来たら、ブラシュアップもしよう。