lsが出力からスクリプトとバイナリを区別するようにします。

lsが出力からスクリプトとバイナリを区別するようにします。

ls実行可能なスクリプトと実際にコンパイルされたバイナリを区別することは可能ですか?

権限は一般的に同じです(+x)、両方ともls -Fアスタリスク(*)が付いているので区別するのは難しいです。色を設定するスクリプトがありますが、lsファイルが実行可能かどうかに依存するため、同じように見えます。

BG='01;32'  # green
EX="ex=$BG" # file with execute permission

多くのファイルに拡張機能がないため、拡張機能に依存したくありません。

cat奇妙なエラーメッセージが表示され、「この問題を引き起こすコードは何ですか?」と思うときにファイルが安全であるかどうかを知りたいと思います。

標準ソリューションがない場合は、file共通関数からの出力を解析し、独自のマークアップを挿入するのはどうですか?それとも遅すぎますかls

ベストアンサー1

バイナリとスクリプトを区別するには、ファイルの内容を調べる必要があります。lsこれを行わずに、ファイル名とメタデータ(タイプ、権限など)のみを調べます。

fileこれはスクリプトとバイナリをさまざまな方法で色分けするためのおおよそのパーサーです。これは次のように機能します。メタデータを追加するにはパッチ操作が必要です。これにはディレクトリの内容を一覧表示するためのls -dより直接的な方法(PerlやPythonなど)が必要です。lsx somedir/*ファイル名に改行やコロンが含まれていないとします(オプションを使用して:他の文字列の区切り文字を変更できます)。-Ffile

lsx () {
  file -iN -- "$@" |
  while IFS= read -r line; do
    name=${line%%: *}; type=${line#*: }
    color=0
    case $type in
      application/x-executable*) color='32';;
      text/x-shellscript*) color='01;32';;
      application/*zip*) color='31';;
    esac
    printf '\033[%sm%s\033[0m\n' "$color" "$name"
  done
}

おすすめ記事