Você também pode fazer isso com um script curto de 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 preencher o número da linha por 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.sh
no diretório de trabalho atual:
./numbered-ls.sh [DIRECTORY]
O argumento DIRECTORY
é opcional e é padronizado para o diretório de trabalho atual.
Explicação
-
Se o script foi invocado com um argumento, altere o diretório de trabalho para o caminho no primeiro argumento.
-
Corresponde a 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 por meio de cat -vt
para lidar normalmente com nomes de arquivos que contenham caracteres não imprimíveis que o terminal possa interpretar como caracteres de controle.