拾い物のコンパス

まともに書いたメモ

findしてlessする動作を自動化するシェル関数

基本的にfindコマンドで探したファイルはlessなどで閲覧することが多い.大きなプログラムだと,ディレクトリごとに名前が同じファイルがあったりするから,findして目grepしてパスをコピーしてlessするって動作を繰り返しているとうんざりしてくる.そこで自動化するシェル関数を作成した..zshrcに追記すれば使える.
やりたいことはless $(find -name "hoge").複数ヒットしたときもカバーしたいと思うと複雑になってくる.

code

zsh上では動作が確認できている.bashは知らない.

# findで見つけたファイルを表示し,lessする
function fl() {
  if [[ $# -gt 0 ]]; then
    list=`find -type f -name $1 2>/dev/null`
    if [[ $list = "" ]]; then
      line="0"
    else
      line=`echo $list | wc -l`
    fi
    case "$line" in
      "0") echo "No file" ;;
      "1") less $list ;;
      *)   echo -en $list | nl
           arr=(`echo $list | tr -s '\n', ' '`)
           echo -en "file: "
           read num
           less $arr[$num] 2>/dev/null ;;
    esac
  else
    echo "fn \"<file_name>\""
  fi
}

使用例

$ fl "*zshrc"
1  ./git/zsh/StartupFiles/zshrc
2  ./dotfiles/.zshrc
flie: 2 <Enter>

検索する対象はカレントディレクトリ以下.ダブルクウォートで囲めばワイルドカードでの検索もできる.候補が一つしか無いときはそれをlessする.
とりあえずこれを使って,不便なら繰り返し処理を加えるなりしてみようかな.
そもそもIntelIJみたいなIDE使えという話もあるが,手軽に探す分にはこれで十分だろう.コードが冗長な気がするから,気が向いたら書き直す.

参考

bash でカンマ区切り文字を split して変数に代入