ls -l --group-directories-first (シンボリックリンクでも機能)

ls -l --group-directories-first (シンボリックリンクでも機能)

lsオプションを使用すると、--group-directories-firstディレクトリが一番上に表示され、出力がきれいになり、lsきれいになります。

ls -l --group-directories-first

しかし、それはうまくいかず、symlinks実際にはsymlinksディレクトリで動作します。使用可能

ls -l -L --group-directories-first

上部に両方のディレクトリが表示されますが、正しいディレクトリとシンボリックリンクディレクトリを区別できないため、再び混乱します。

ls通常のディレクトリと区別できるようにしながら、上部にシンボリックリンクディレクトリを表示することは可能ですか?

編集する: を使用していますbash

答え1

いいえ、しかしを使用している場合は、zsh次のことができます。

mll() {
  (($#)) || set -- *(N-/) *(N^-/)
  (($#)) && ls -ldU -- $@
}

次のようにグローバルソート順序を定義することもできます。

dir1st() { [[ -d $REPLY ]] && REPLY=1-$REPLY || REPLY=2-$REPLY;}

次のように使用してください。

ls -ldU -- *(o+dir1st)

これにより、他のオプションや他のモードを持つコマンドではlsなく、他のコマンドと組み合わせて使用​​できます。ls

ls -ldU -- .*(o+dir1st) # to list the hidden files and dirs

または:

ls -ldU -- ^*[[:lower:]]*(o+dir1st) # to list the all-uppercase files and dirs

を使用する必要がある場合は、bash次のようになります。

mll() (
  if (($# == 0)); then
    dirs=() others=()
    shopt -s nullglob
    for f in *; do
      if [[ -d $f ]]; then
        dirs+=("$f")
      else
        others+=("$f")
      fi
    done
    set -- "${dirs[@]}" "${others[@]}"
  fi
  (($#)) && exec ls -ldU -- "$@"
)

bashワイルドカード修飾子やワイルドカードの並べ替え順序に影響を与える方法、ワイルドカードごとにnullワイルドカードを空のワイルドカードに変換する方法、オプション付きのローカルコンテキスト(サブシェルを起動するのではなく、上記の方法ではなく(){}AFAIK。

関連情報