項目数によって ls コマンドが異なる動作をする

項目数によって ls コマンドが異なる動作をする

リストできるディレクトリエントリの数によって、lsコマンドが異なる動作をすることができますか?

使用する場合ls(修正オプションはありませんが、ディレクトリまたはフィルタを指定できます)、次のことを望みます。

  • -l項目数が10個以下の場合は、長いリスト形式を使用してください。
  • 最初の50項目のみを表示し、警告を出力します。x more entries

可能ですか?どうすればいいですか?

カスタムスクリプトを使用してカスタムコマンドに切り替えたくありません。カスタムスクリプトやラッパーを使用できますが、それでもlsこれを行い、機能全体を維持するために使用したいと思います。つまり、単にスクリプト/ラッパーをmy-custom-ls呼び出すだけではありません。ls

ベストアンサー1

カスタムスクリプトコマンド/ラッパー関数が必要ない場合は、カスタムバイナリコマンドが必要です。 GNUlsソースコードは他の実装と同様に利用可能です。

独自のパッチバージョンを作成するだけlsです。

この動作の変更により、POSIX コンプライアンスが中断されます。

編集(修正された質問に従って):

ls() {
    if [ $(command ls "$@" | wc -l) -gt 10 ]; then
        command ls "$@" | head -50
    else
        command ls -l "$@"
    fi
}

残りのアイテム数を表示する拡張バージョン:

ls() {
    [ ! -t 1 ] && { command ls "$@" ; return ; }
    r=$(command ls "$@")
    lines=$(printf "%s" "$r" | wc -l)
    if [ $lines -gt 10 ]; then
        printf "%s" "$r" | head -50
        if [ $lines -gt 50 ]; then
          printf "%d more entries\n" $((lines - 50))
        fi
    else
        command ls -l "$@"
    fi
}

おすすめ記事