# 移動したらすぐls -lah
# ただしファイルなどが20より多かった場合は
# lsで簡易表示
function chpwd() {
if [ 20 -gt `ls -1 | wc -l` ]; then
ls -lah
else
ls
fi
}
zsh だと、chpwd
という関数を定義してやるだけで、移動したときに動作する関数ができちゃうらしいです。 普通に ls
とだけ入れておけば、移動したらすぐに一覧表示してくれたりするのですが、僕は ls -lah
として、詳細も表示してました。
ただ落とし穴が・・・。
これでしばらく使ってたら、ファイル数が1000以上あるディレクトリを自動的に ls -lah
してしまって、しかもPCが激重な状態だったので、しばらくずらずらと表示する事態に・・・。
これはいかん!と思って、ちょっと考えました。
この if の後にある [
と ]
ですが、シェルスクリプトでは test コマンドに相当します。 man test
とかで詳しく載ってます。
※補足 man [
でも載ってました。知らなかった・・・。
これを使うと、数式の計算結果が真か偽かで 0 か 1 を返すことができ、その後の処理を if 文で場合分け出来ちゃったりするので、20よりファイル数(ディレクトリなど含む)が多いかどうかで判定してみました。
if [ 20 -gt `ls -1 | wc -l` ]; then
また、ls -1 | wc -l
は、ls
を1行単位で出力させつつ、それを後の入力に渡して(パイプ処理)、その行数を計ってます。
wc -l
で行数のみを出力するので、結果的にファイル数が20より多いかどうかが判定できてます。(ちなみに -gt
は greater than つまり『より大きい』の略ですね)
UNIXの Small is beautiful. な思想に感動しつつ、大量の出力を避けるシェルスクリプトも書けて万々歳です。(30分ほど仕事が進んでおりませんでしたが・・・)
この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります