短い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処理して、端末が制御文字として解釈する可能性のある印刷できない文字を含むファイル名を適切に処理します。