Ви також можете зробити це повністю за допомогою короткого сценарію 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щоб граціозно працювати з іменами файлів, які містять символи, що не друкуються, що термінал може інтерпретувати як контрольні символи.