Você precisa examinar o conteúdo de um arquivo para distinguir entre binários e scripts. ls
não faz isso, ele apenas analisa nomes de arquivos e metadados (tipo, permissão, etc.).
Aqui está um analisador bruto para file
que colore scripts e binários de maneira diferente. Ele age como ls -d
; adicionar metadados exigiria um trabalho de correção que exige uma abordagem mais direta (por exemplo, em Perl ou Python); use lsx somedir/*
para listar o conteúdo de um diretório. Supõe-se que os nomes dos arquivos não contenham novas linhas nem dois pontos (você pode alterar o separador :
para alguma outra sequência com a opção -F
para file
).
lsx () {
file -iN -- "$@" |
while IFS= read -r line; do
name=${line%%: *}; type=${line#*: }
color=0
case $type in
application/x-executable*) color='32';;
text/x-shellscript*) color='01;32';;
application/*zip*) color='31';;
esac
printf '3[%sm%s3[0m\n' "$color" "$name"
done
}