--group-directory-first, option pour la commande «ls»

13

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

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

Ceci est un alias dans mon bashrc, mais l' --group-directories-firstoption est devenue illégale sous OS X après avoir mis à niveau mon bash avec Homebrew. Dans mon bureau Ubuntu, je peux toujours utiliser cette option.

Dans quelle version de Bash, l'option n'est pas prise en charge? La version Bash de ma machine OS X ditGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Je voudrais utiliser à --group-directories-firstnouveau l'option. Existe-t-il un moyen d'y parvenir?

IzumiSy
la source
1
Utilisez-vous le gnu correutils lsou le macOS ls? Avez-vous essayé l'autre?
bmike

Réponses:

12

Installez coreutilsavec Homebrew et alias llà la gls -Flh --group-directories-firstplace.

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

Dans Ubuntu, lsest fourni par GNU Coreutils , que Ubuntu a toujours. C'est pourquoi les lssupports --group-directories-firstdans Ubuntu. Vous utilisiez probablement la version GNU Coreutils de lssur macOS auparavant, que Homebrew installe en tant que glsmais qui peut être rendue utilisable comme lsde plusieurs manières.

lsest une commande externe, pas un Bash intégré. L'utilisation d'une version ou d'une construction différente de Bash ne devrait pas l'affecter. Je ne sais pas ce qui s'est passé lorsque vous avez mis à niveau Bash en utilisant Homebrew. Peut-être que Bash a également été mis à niveau; vous aviez peut-être unelsfonction shell ou un alias défini dans un fichier de configuration globale qui a été remplacé; vous aviez peut-être un lien symboliquelsqui avait pointé du doigtglset avait été écrasé; peut-être que vous avez encore quelque chose comme ça, mais votre$PATHa changé. Quoi qu'il se soit passé, GNU Coreutils lsprend en charge--group-directories-first , et le basculement vers celui-ci (comme je pense que bmike le suggère ) devrait résoudre votre problème.

Si, pour une raison quelconque, vous souhaitez utiliser exactement le même .bashrcfichier dans les deux systèmes, il existe plusieurs approches possibles. Vous pouvez créer un lien symbolique, un script d'encapsuleur, une fonction shell ou (parce que l'expansion d'alias Bash n'est pas récursive) un alias shell pour glsdans votre système Ubuntu. Mais je suggère plutôt vérifier quel système d' exploitation est utilisé dans .bashrc. Bien que vous obtiendrez un llalias différent défini dans chaque système, cette approche a l'avantage d'être auto-documentée. Votre .bashrcaura 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 généralement exécuter les Coreutils ls, même si vous n'utilisez pas l' llalias, vous pouvez créer lsun 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 avoir détecté une erreur dans une version antérieure de ce script.)

Eliah Kagan
la source
J'ai suivi cette réponse et utilisé: alias ls = 'gls --color -h --group-directorys first' alias ll = 'ls -al'
user2875289
1
Je pense que dans votre dernière section "Ou si vous trouvez que vous préférez généralement exécuter ..." , le conditionnel doit être changé en :,"$OSTYPE" != linux-gnu puisque vous voulez alias ls en gls si vous n'êtes pas sur un système Linux GNU (par exemple vous êtes sur un Mac).
soroushjp
1
@soroushjp Merci - vous avez raison. (Je l'ai réparé; désolé pour l'attente!)
Eliah Kagan