Se você não quiser uma função de comando / wrapper de script personalizada, será necessário um comando binário personalizado. O código-fonte GNU ls
está disponível, juntamente com outras implementações.
Crie sua própria versão corrigida de ls
e você será definido.
Note que esta mudança de comportamento iria quebrar a conformidade POSIX.
Editar (de acordo com sua pergunta revisada):
ls() {
if [ $(command ls "$@" | wc -l) -gt 10 ]; then
command ls "$@" | head -50
else
command ls -l "$@"
fi
}
Versão aprimorada que mostra o número de entradas restantes:
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
}