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
-s
sort
--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
compinstall
zshコンプリート構成用のメニューベースのインターフェース機能も参照してください。