Bạn cũng có thể làm điều này hoàn toàn với một đoạn script Bash ngắn:
#!/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
Bạn thậm chí có thể ưa thích và điền số dòng cho hơn 9 kết quả:
#!/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
Sử dụng
Giả sử rằng bạn đã lưu tập lệnh dưới dạng tệp thực thi numbered-ls.sh
trong thư mục làm việc hiện tại:
./numbered-ls.sh [DIRECTORY]
Đối số DIRECTORY
là tùy chọn và mặc định cho thư mục làm việc hiện tại.
Giải trình
Nếu tập lệnh được gọi với một đối số, hãy thay đổi thư mục làm việc thành đường dẫn trong đối số đầu tiên.
Khớp tất cả các mục của thư mục làm việc hiện tại và xem qua chúng. Đối với mỗi mục tăng một bộ đếm và in giá trị của nó cùng với tên của mục nhập. Các ký tự ngắt dòng trong tên của mục được thay thế bằng ^N
.
Đưa đầu ra qua cat -vt
để xử lý một cách duyên dáng với các tên tệp có chứa các ký tự không in được mà thiết bị đầu cuối có thể hiểu là các ký tự điều khiển.