आप इसे पूरी तरह से संक्षिप्त बैश स्क्रिप्ट के साथ भी कर सकते हैं:
#!/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गैर-मुद्रण योग्य वर्णों वाले फ़ाइल नामों के साथ आउटपुट को पाइप के माध्यम से सुंदर तरीके से निपटने के लिए, जिसे टर्मिनल नियंत्रण वर्णों के रूप में व्याख्या कर सकता है।