29 votes

Option --group-directories-first pour la commande "ls".

J'utilise à la fois Ubuntu 16.04 et OS X.

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

C'est un alias dans mon bashrc, mais en quelque sorte --group-directories-first option est devenue illégale dans OS X après que j'ai mis à jour mon bash avec Homebrew. Dans mon bureau Ubuntu, je peux toujours utiliser cette option.

Dans quelle version de Bash, cette option n'est pas supportée ? La version de Bash dans ma machine OS X dit GNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Je voudrais utiliser --group-directories-first encore une fois. Y a-t-il un moyen d'y parvenir ?

1 votes

Utilisez-vous les correutils gnu ? ls ou le système MacOS ls ? Avez-vous essayé l'autre ?

27voto

Frontline Points 747

Installer coreutils avec Homebrew et alias ll a **_gls_** -Flh --group-directories-first à la place.

  • brew install coreutils installe GNU Coreutils au cas où il ne serait pas installé.
  • Utilisez alias ll='gls -Flh --group-directories-first' sur .bashrc .
    (Si vous voulez utiliser le même .bashrc dans les deux systèmes d'exploitation, voir ci-dessous).

Dans Ubuntu, ls est fourni par GNU Coreutils ce qu'Ubuntu a toujours fait. C'est pourquoi ls soutient --group-directories-first dans Ubuntu. Vous aviez probablement utilisé la version GNU Coreutils de ls sur MacOS auparavant, aussi, que Homebrew installe en tant que gls mais qui peut être rendu utilisable comme ls de plusieurs façons.

ls est une commande externe, pas une commande intégrée à Bash. L'utilisation d'une version ou d'une compilation différente de Bash ne devrait pas l'affecter. Je ne suis pas sûr de ce qui s'est passé lorsque vous avez mis à jour Bash en utilisant Homebrew. Il se peut que d'autres éléments que Bash aient été mis à jour, ou que vous ayez eu un problème avec le système d'exploitation. ls fonction shell ou alias défini dans un fichier de configuration globale qui a été remplacé ; vous aviez peut-être un lien symbolique ls qui avait indiqué gls et a été écrasé ; peut-être avez-vous toujours quelque chose comme ça mais votre $PATH a changé. Peu importe ce qui s'est passé, GNU Coreutils ls soutient --group-directories-first et y passer (comme je le crois bmike suggère ) devrait régler votre problème.

Si, pour une raison quelconque, vous voulez utiliser exactement la même .bashrc dans les deux systèmes, il y a quelques approches possibles. Vous pouvez créer un lien symbolique, un wrapper script, une fonction shell, ou (parce que l'expansion des alias Bash est non récursive) un alias shell pour gls dans votre système Ubuntu. Mais je suggère plutôt vérifier quel système d'exploitation est utilisé sur .bashrc . Bien que vous obtiendrez un ll défini dans chaque système, cette approche a l'avantage d'être auto-documentée. Votre .bashrc aura un sens pour vous dans un an, ou un mois.

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

Ou si vous trouvez que vous préférez habituellement exécuter les Coreutils ls même si vous n'utilisez pas l'option ll vous pouvez faire ls un alias pour gls :

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

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

(Merci à soroushjp pour rattraper une erreur dans une version antérieure de ce script.)

1 votes

J'ai suivi cette réponse et j'ai utilisé : alias ls='gls --color -h --group-directories-first

1 votes

@soroushjp Merci, vous avez raison. (J'ai corrigé le problème ; désolé pour l'attente !)

1 votes

Le problème avec le système GNU ls est qu'en échange de la --group-directories-first vous perdez le bénéfice de l'option -O y -@ qui vous permet de dresser la liste des attributs étendus et des flux de données alternatifs.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X