リストできるディレクトリエントリの数によって、lsコマンドが異なる動作をすることができますか?
使用する場合ls
(修正オプションはありませんが、ディレクトリまたはフィルタを指定できます)、次のことを望みます。
-l
項目数が10個以下の場合は、長いリスト形式を使用してください。- 最初の50項目のみを表示し、警告を出力します。
x more entries
可能ですか?どうすればいいですか?
カスタムスクリプトを使用してカスタムコマンドに切り替えたくありません。カスタムスクリプトやラッパーを使用できますが、それでもls
これを行い、機能全体を維持するために使用したいと思います。つまり、単にスクリプト/ラッパーをmy-custom-ls
呼び出すだけではありません。ls
ベストアンサー1
カスタムスクリプトコマンド/ラッパー関数が必要ない場合は、カスタムバイナリコマンドが必要です。 GNUls
ソースコードは他の実装と同様に利用可能です。
独自のパッチバージョンを作成するだけls
です。
この動作の変更により、POSIX コンプライアンスが中断されます。
編集(修正された質問に従って):
ls() {
if [ $(command ls "$@" | wc -l) -gt 10 ]; then
command ls "$@" | head -50
else
command ls -l "$@"
fi
}
残りのアイテム数を表示する拡張バージョン:
ls() {
[ ! -t 1 ] && { command ls "$@" ; return ; }
r=$(command ls "$@")
lines=$(printf "%s" "$r" | wc -l)
if [ $lines -gt 10 ]; then
printf "%s" "$r" | head -50
if [ $lines -gt 50 ]; then
printf "%d more entries\n" $((lines - 50))
fi
else
command ls -l "$@"
fi
}