lsを使用して他のディレクトリとディレクトリシンボリックリンクをグループ化する方法は?

lsを使用して他のディレクトリとディレクトリシンボリックリンクをグループ化する方法は?

ls --group-directories-firstすべてのディレクトリはファイルの前に表示されますが、ディレクトリへのシンボリックリンクがある場合はファイル間に表示されます。ディレクトリシンボリックリンクを他の一般ディレクトリとグループ化する方法はありますか?

答え1

たとえば、次のようになります-L

$ ls -l
total 4
-rw-r--r-- 1 ja users    0 Dec 20 13:23 A
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 b
lrwxrwxrwx 1 ja users    1 Dec 20 13:23 sl -> b
$ ls --group-directories-first -l
total 4
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 b
-rw-r--r-- 1 ja users    0 Dec 20 13:23 A
lrwxrwxrwx 1 ja users    1 Dec 20 13:23 sl -> b
$ ls --group-directories-first -lL
total 8
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 b
drwxr-xr-x 2 ja users 4096 Dec 20 13:23 sl
-rw-r--r-- 1 ja users    0 Dec 20 13:23 A

答え2

-L私はこれが(シンボリックリンクに関する情報を提供しますが、シンボリックリンクのターゲットは提供しません)なければ可能ではないと思います。

常にls呼び出しを実行できますtwo。 1つはディレクトリ用で、もう1つはディレクトリではない場合です。そしてzsh

lldirfirst() {
  local -a dir nondir
  local ret=0
  dir=(*(N-/)) nondir=(*(N^-/))
  (($#dir == 0)) || ls -ld -- $dir || ret=$?
  (($#nondir == 0)) || ls -ld -- $nondir || ret=$?
  return $ret
}

これはls -l現在のディレクトリでのみ機能するため、他のファイル/ディレクトリを一覧表示するには調整する必要があります。

また、列の整列が壊れる可能性があります。

$ lldirfirst
drwxr-xr-x 2 chazelas chazelas 4096 Dec 20 13:20 c
lrwxrwxrwx 1 chazelas chazelas    1 Dec 20 13:20 d -> c
-rw-r--r-- 1 chazelas chazelas 0 Dec 20 13:20 a
-rw-r--r-- 1 chazelas chazelas 0 Dec 20 13:20 b

-qFもう1つのオプションは、firstで終わる行を使用してソートすることです/(GNUのlsすべての実装がディレクトリにシンボリックリンクを配置し、GNUと同様の実装をサポートしていないが、すでにGNUに固有のものと仮定)。ls/sort-ssort--group-directories-first

lsdirfirst() {
  ls -qF "$@" |
    awk '{if(/^total [0-9]+$/ || /\/$/) n=1; else n=2; print n, $0}' |
    sort -sk1,1 | cut -d' ' -f2-
}

例:

$ lsdirfirst -l
total 4
drwxr-xr-x 2 chazelas chazelas 4096 Dec 20 13:20 c/
lrwxrwxrwx 1 chazelas chazelas    1 Dec 20 13:20 d -> c/
-rw-r--r-- 1 chazelas chazelas    0 Dec 20 13:20 a
-rw-r--r-- 1 chazelas chazelas    0 Dec 20 13:20 b

zsh以下を使用して、最初にディレクトリを一覧表示するように完成したシステムに指示できます。

zstyle ':completion:*' list-dirs-first true

シンボリックリンクをディレクトリに配置します。目次カテゴリー:

$lsTab
目次を完成させる
CD@
完全な文書
ab

(色もあります完了中...説明(追加sが有効な場合zstyle

zstyleコマンドを次のように変更するだけです。

zstyle ':completion:*:*:(ls|echo):*:*' list-dirs-first true

lsたとえば、コマンドに対してのみecho有効にします。

~/.zshrc以下は、上記のカラー出力を得るための構成例です。

eval "$(dircolors -b)"
zstyle ':completion:*' completer _expand _complete _ignored _correct _approximate _prefix
zstyle ':completion:*' format 'Completing %d'
zstyle ':completion:*' group-name ''
zstyle ':completion:*' menu select=2
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' list-dirs-first true
autoload -Uz compinit
compinit -i

compinstallzshコンプリート構成用のメニューベースのインターフェース機能も参照してください。

関連情報