ls -l --group-directories-first(シンボリックリンクにも作用)


9

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

ls -l --group-directories-first

ただし、symlinks実際symlinksにはディレクトリに対するには作用しません。使用する可能性があります

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

これは両方の種類のディレクトリを上にリストしますが、適切なディレクトリとシンボリックリンクされたディレクトリを区別しないため、やはり混乱を招きます。

ls通常のディレクトリとは区別しながら、シンボリックリンクされたディレクトリを上に表示できますか?

編集: 私はを使用していbashます。


これは、の部分的な特異な動作ですlsstat()システムコールによると、ディレクトリへのシンボリックリンクはまだディレクトリです(S_ISDIR(st_mode)trueを返します)。Evidentially lsシンボリックリンクを割り引く 前に、それはこのことを確認します。
goldilocks 2014年

2
@goldilocks、ない、lsないlstat()(とreadlinkシンボリックリンクの場合)は、使用しない限り、-L(それが使用する場合のオプションをstat()
ステファンChazelas

@StephaneChazelas:うーん、生きて学びなさい。私はS_ISLNK(st_mode)viaもtrueを返すと思っていましたstat()が、それはありませんlstat()。また、ISLNKは、リンクがリンクへのリンクであっても、statを介してtrueを返しません。それISLNKは一種の不特定ですが、statを介してtrueを返すことは決してないかもしれないという意味です...
goldilocks

@goldilocks、statシンボリックリンクの最後にあるファイルのプロパティを提供します。それが存在しないかアクセスできない場合、statはENOENTを返すため、によって返されるものはstatシンボリックリンクにはなりません。stat()同じように、あなたにシンボリックリンクについては何も教えてくれないだろうopenシンボリックリンクを開くことはありません、またはchmod()シンボリックリンクのパーミッションを変更しません...など
ステファンChazelas

回答:


5

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

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

次のようなグロビングのソート順を定義することもできます。

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

そしてそれを次のように使用します:

ls -ldU -- *(o+dir1st)

こうすることlsls、別のオプション以外のコマンドと一緒に、または次のようなさまざまなパターンに使用できます。

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 。


1
同様のトリックはありますbashか?
Martin Vegter 2014年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.