Option --group-directory-first für den Befehl "ls"

13

Ich verwende sowohl Ubuntu 16.04 als auch OS X.

alias ll='ls -Flh --group-directories-first'

Dies ist ein Alias ​​in meinem Bashrc, aber irgendwie wurde die --group-directories-firstOption in OS X illegal, nachdem ich mein Bash mit Homebrew aktualisiert hatte. Auf meinem Ubuntu-Desktop kann ich diese Option weiterhin verwenden.

In welcher Version von Bash wird die Option nicht unterstützt? Die Bash-Version in meinem OS X-Computer sagtGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Ich würde die --group-directories-firstOption gerne wieder verwenden. Gibt es eine Möglichkeit, dies zu erreichen?

IzumiSy
quelle
1
Verwenden Sie die Gnu Correutils lsoder das MacOS ls? Hast du den anderen ausprobiert?
bmike

Antworten:

12

Installieren Sie stattdessen coreutilsmit Homebrew und Alias llzu gls -Flh --group-directories-first.

  • brew install coreutils installiert GNU Coreutils , falls es nicht installiert ist.
  • Verwenden Sie alias ll='gls -Flh --group-directories-first'in .bashrc.
    (Wenn Sie .bashrcin beiden Betriebssystemen dieselbe Datei verwenden möchten , siehe unten.)

In Ubuntu lswird von GNU Coreutils bereitgestellt , die Ubuntu immer hat. Deshalb lsunterstützt --group-directories-firstin Ubuntu. Wahrscheinlich haben Sie auch schon einmal die GNU Coreutils-Version von lsunter macOS verwendet, die Homebrew installiert, glsaber lsauf verschiedene Arten nutzbar gemacht werden kann.

lsist ein externer Befehl, kein eingebauter Bash. Die Verwendung einer anderen Version oder eines anderen Builds von Bash sollte sich nicht darauf auswirken. Ich bin mir nicht sicher, was passiert ist, als Sie Bash mit Homebrew aktualisiert haben. Vielleicht wurde auch mehr als Bash aktualisiert; Möglicherweise wurdelsin einer globalen KonfigurationsdateieineShell-Funktion oder ein Alias ​​definiert, die ersetzt wurde. Vielleicht hatten Sie eine symbolische Verknüpfungls, auf die hingewiesenglsund die überschrieben wurde. Vielleicht hast du noch so etwas, aber dein$PATHhat sich geändert. Was auch immer passiert ist, GNU Coreutils lsunterstützt--group-directories-first und ein Wechsel dorthin (wie bmike meiner Meinung nach vorschlägt ) sollte Ihr Problem beheben.

Wenn Sie aus irgendeinem Grund .bashrcin beiden Systemen genau dieselbe Datei verwenden möchten , gibt es einige mögliche Ansätze. Sie können einen Symlink, ein Wrapper-Skript, eine Shell-Funktion oder (da die Bash-Alias-Erweiterung nicht rekursiv ist) einen Shell-Alias ​​für glsIhr Ubuntu-System erstellen . Aber ich schlage vor , statt Kontrolle , welche OS verwendet wird in .bashrc. Obwohl llin jedem System ein anderer Alias ​​definiert wird, hat dieser Ansatz den Vorteil, dass er sich selbst dokumentiert. Ihr .bashrcWille macht für Sie in einem Jahr oder einem Monat Sinn.

if [ "$OSTYPE" == linux-gnu ]; then  # Is this the Ubuntu system?
    alias ll='ls -Flh --group-directories-first'
else
    alias ll='gls -Flh --group-directories-first'
fi

Wenn Sie normalerweise lieber die Coreutils ausführen ls, können Sie einen Alias erstellen , selbst wenn Sie den llAlias nicht verwenden :lsgls

if [ "$OSTYPE" != linux-gnu ]; then  # Is this the macOS system?
    alias ls=gls
fi

alias ll='ls -Flh --group-directories-first'

(Vielen Dank an soroushjp für den Fehler in einer früheren Version dieses Skripts.)

Eliah Kagan
quelle
Ich folgte dieser Antwort und benutzte: alias ls = 'gls --color -h --group-directory-first' alias ll = 'ls -al'
user2875289
1
Ich denke, in Ihrem letzten Abschnitt "Oder wenn Sie feststellen, dass Sie normalerweise lieber ausführen ..." muss die Bedingung in: geändert werden "$OSTYPE" != linux-gnu , da Sie den Alias ls to gls verwenden möchten, wenn Sie nicht auf einem Linux-GNU-System sind (z du bist auf einem Mac).
Soroushjp
1
@soroushjp Danke - du hast recht. (Ich habe es behoben; Entschuldigung für das Warten!)
Eliah Kagan