--group-directorios-primera opción para el comando "ls"

13

Estoy usando Ubuntu 16.04 y OS X.

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

Este es un alias en mi bashrc, pero de alguna manera la --group-directories-firstopción se volvió ilegal en OS X después de actualizar mi bash con Homebrew. En mi escritorio Ubuntu, todavía puedo usar esa opción.

¿En qué versión de Bash, la opción no es compatible? La versión Bash en mi máquina OS X diceGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Me gustaría usar la --group-directories-firstopción nuevamente. ¿Hay alguna forma de lograrlo?

IzumiSy
fuente
1
¿Estás usando el gnu correutils lso el macOS ls? ¿Has probado el otro?
bmike

Respuestas:

12

Instalar coreutilscon Homebrew y alias llen su gls -Flh --group-directories-firstlugar.

  • brew install coreutils instala GNU Coreutils , en caso de que no esté instalado.
  • Utilizar alias ll='gls -Flh --group-directories-first'en .bashrc.
    (Si desea utilizar el mismo .bashrcarchivo en ambos sistemas operativos, consulte a continuación).

En Ubuntu, lses proporcionado por GNU Coreutils , que Ubuntu siempre tiene. Por eso es lscompatible --group-directories-firstcon Ubuntu. Probablemente también haya estado utilizando la versión GNU Coreutils de lsmacOS anteriormente, que Homebrew instala como glspero que se puede utilizar lsde varias maneras.

lses un comando externo, no un Bash incorporado. Usar una versión o compilación diferente de Bash no debería afectarlo. No estoy seguro de lo que sucedió cuando actualizaste Bash usando Homebrew. Quizás más de lo que Bash también se actualizó; quizás tenía unalsfunción de shell o un alias definido en un archivo de configuración global que fue reemplazado; tal vez tenías un enlace simbólicolsque apuntabaglsy se sobrescribía; quizás todavía tengas algo así pero tu$PATHha cambiado. Pase lo que pase, GNU Coreutils es lscompatible--group-directories-first , y cambiar a él (como creo que sugiere bmike ) debería solucionar su problema.

Si por alguna razón desea utilizar exactamente el mismo .bashrcarchivo en ambos sistemas, hay algunos enfoques posibles. Puede crear un enlace simbólico, un script de envoltura, una función de shell o (porque la expansión de alias de Bash no es recursiva) alias de shell glsen su sistema Ubuntu. Pero sugiero en lugar de cheques que sistema operativo se está utilizando en .bashrc. Aunque obtendrá un llalias diferente definido en cada sistema, este enfoque tiene la ventaja de ser autodocumentado. Su .bashrcva a tener sentido para ti en un año, o un mes.

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

O si cree que generalmente prefiere ejecutar Coreutils ls, incluso si no está utilizando el llalias, puede crear lsun alias para gls:

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

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

(Gracias a soroushjp por detectar un error en una versión anterior de ese script).

Eliah Kagan
fuente
Seguí esta respuesta y uso: alias ls = 'gls --color -h --group-directorios-first' alias ll = 'ls -al'
user2875289
1
Creo que en su última sección "O si usted encuentra que por lo general prefiero correr ..." , las necesidades condicionales para cambiarse a: "$OSTYPE" != linux-gnu , ya que desea alias ls a gls si estás no en un sistema Linux GNU (por ejemplo, estás en una Mac)
soroushjp
1
@soroushjp Gracias, tienes razón. (Lo arreglé; ¡perdón por la espera!)
Eliah Kagan