Вы также можете сделать это полностью с помощью короткого скрипта 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
Вы даже можете проявить фантазию и добавить номер строки для более чем 9 результатов:
#!/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
использование
Предполагая, что вы сохранили скрипт как исполняемый файл numbered-ls.shв текущем рабочем каталоге:
./numbered-ls.sh [DIRECTORY]
Аргумент DIRECTORYявляется необязательным и по умолчанию является текущим рабочим каталогом.
объяснение
Если скрипт был вызван с аргументом, измените рабочий каталог на путь в первом аргументе.
Сопоставьте все записи текущего рабочего каталога и просмотрите их. Для каждой записи увеличьте счетчик и выведите его значение вместе с именем записи. Символы разрыва строки в названии записи заменяются на ^N.
Передайте вывод, cat -vtчтобы корректно обрабатывать имена файлов, которые содержат непечатаемые символы, которые терминал может интерпретировать как управляющие символы.