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