Você também pode fazer isso inteiramente com um pequeno script do Bash:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
i=0
for f in *; do
printf '%d. %s\n' "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
Você pode até ser chique e digitar o número da linha para obter mais de 9 resultados:
#!/bin/bash
set -eu
shopt -s nullglob
[ "$#" -eq 0 ] || cd -- "$1"
ls=(*)
pad=${#ls[@]}
pad=${#pad}
i=0
for f in *; do
printf '%*d. %s\n' "$pad" "$((++i))" "${f//$'\n'/^N}"
done |
cat -vt
Uso
Supondo que você salvou o script como um arquivo executável numbered-ls.shno diretório de trabalho atual:
./numbered-ls.sh [DIRECTORY]
O argumento DIRECTORYé opcional e o padrão é o diretório de trabalho atual.
Explicação
Se o script foi chamado com um argumento, altere o diretório de trabalho para o caminho no primeiro argumento.
Combine todas as entradas do diretório de trabalho atual e examine-as. Para cada entrada, incremente um contador e imprima seu valor junto com o nome da entrada. Os caracteres de quebra de linha no nome da entrada são substituídos por ^N.
Canalize a saída cat -vtpara lidar normalmente com nomes de arquivos que contêm caracteres não imprimíveis que o terminal pode interpretar como caracteres de controle.