Ich denke nicht, dass dies ohne möglich ist -L
(was Ihnen Informationen über das Ziel des Symlinks anstelle des Symlinks gibt).
Sie können immer two
ls-Aufrufe ausführen , einen für die Verzeichnisse, einen für die Nicht-Verzeichnisse. Mit 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
Dies gilt nur für das aktuelle Verzeichnis. Es muss angepasst werden, um andere Dateien / Verzeichnisse aufzulisten.
Beachten Sie auch, dass die Spaltenausrichtung möglicherweise beschädigt wird:
$ 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
Eine andere Möglichkeit wäre, -qF
die Zeilen zu verwenden und zu sortieren, die /
zuerst enden (setzt GNU voraus, ls
da nicht jede ls
Implementierung /
Symlinks zu Verzeichnissen enthält und eine sort
Implementierung, die -s
wie GNU unterstützt sort
, aber Ihre --group-directories-first
ist ohnehin schon GNU-spezifisch):
lsdirfirst() {
ls -qF "$@" |
awk '{if(/^total [0-9]+$/ || /\/$/) n=1; else n=2; print n, $0}' |
sort -sk1,1 | cut -d' ' -f2-
}
Beispiel:
$ 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
Beachten Sie, dass zsh
Sie mit seinem Vervollständigungssystem anweisen können, die Verzeichnisse zuerst aufzulisten mit:
zstyle ':completion:*' list-dirs-first true
Außerdem werden Symlinks zu Verzeichnissen in der Verzeichniskategorie eingefügt:
$ ls Tab
Verzeichnis vervollständigen
c / d @
Dateien vervollständigen
ab
(mit Farben und denen, die ... Beschreibungen vervollständigen, wenn mit mehr zstyle
s aktiviert )
Sie können diesen Abschlussstil für einen Befehl pro Basis aktivieren, indem Sie diesen zstyle
Befehl in Folgendes ändern :
zstyle ':completion:*:*:(ls|echo):*:*' list-dirs-first true
Zum Beispiel, um es nur für die Befehle ls
und zu aktivieren echo
.
Hier ist ein Beispiel für die ~/.zshrc
Konfiguration, um diese Ausgabe in der obigen Farbe zu erhalten.
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
Siehe auch die compinstall
Funktion für eine menübasierte Schnittstelle zum Konfigurieren der zsh-Vervollständigung.
-L
was du willst