คุณสามารถทำสิ่งนี้ได้อย่างสมบูรณ์ด้วยสคริปต์ 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
เพื่อจัดการกับชื่อไฟล์ที่มีอักขระที่ไม่สามารถพิมพ์ได้ซึ่งเทอร์มินัลอาจตีความว่าเป็นอักขระควบคุม