También puede hacer esto completamente con un breve script 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
Incluso puede ser elegante y rellenar el número de línea para obtener más 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
Suponiendo que guardó el script como un archivo ejecutable numbered-ls.shen el directorio de trabajo actual:
./numbered-ls.sh [DIRECTORY]
El argumento DIRECTORYes opcional y por defecto es el directorio de trabajo actual.
Explicación
Si se invocó el script con un argumento, cambie el directorio de trabajo a la ruta en el primer argumento.
Haga coincidir todas las entradas del directorio de trabajo actual y mírelas. Para cada entrada, incremente un contador e imprima su valor junto con el nombre de la entrada. Los caracteres de salto de línea en el nombre de la entrada se reemplazan con ^N.
Canalice la salida cat -vtpara tratar con gracia los nombres de archivo que contienen caracteres no imprimibles que el terminal puede interpretar como caracteres de control.