web-dev-qa-db-ja.com

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を使用しています。

9
Martin Vegter

いいえ。ただし、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には、グロブ修飾子やグロブの並べ替え順序に影響を与える方法、グロブごとにnullglobを有効にする方法、またはオプションのローカルコンテキスト(サブシェルの開始以外)がありません。 () の代わりに {}上記)AFAIK。

5