28 votos

Opción --group-directories-first para el comando "ls

Utilizo tanto Ubuntu 16.04 como OS X.

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

Este es un alias en mi bashrc, pero de alguna manera --group-directories-first opció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 de Bash en mi máquina OS X dice GNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Me gustaría utilizar --group-directories-first otra vez. ¿Hay alguna forma de conseguirlo?

1 votos

¿Está utilizando el gnu correutils ls o el MacOS ls ? ¿Has probado el otro?

26voto

Frontline Puntos 747

Instale coreutils con Homebrew y alias ll a **_gls_** -Flh --group-directories-first en su lugar.

  • brew install coreutils instala GNU Coreutils en caso de que no esté instalado.
  • Utilice alias ll='gls -Flh --group-directories-first' en .bashrc .
    (Si desea utilizar el mismo .bashrc en ambos sistemas operativos, véase más abajo).

En Ubuntu, ls es proporcionado por GNU Coreutils que Ubuntu siempre ha tenido. Por eso ls admite --group-directories-first en Ubuntu. Probablemente ha estado utilizando la versión GNU Coreutils de ls en MacOS antes, también, que Homebrew instala como gls pero que pueden utilizarse como ls de varias maneras.

ls es un comando externo, no un builtin de Bash. Utilizar una versión o compilación diferente de Bash no debería afectarlo. No estoy seguro de lo que pasó cuando actualizaste Bash usando Homebrew. Tal vez más que Bash se actualizó también; tal vez usted tenía un ls función del shell o alias definido en un archivo de configuración global que fue reemplazado; tal vez tenía un enlace simbólico ls que había apuntado a gls y se sobrescribió; tal vez aún tenga algo así pero su $PATH ha cambiado. Lo que sea que haya pasado, GNU Coreutils ls admite --group-directories-first y cambiar a ella (como creo bmike sugiere ) debería solucionar tu problema.

Si por alguna razón desea utilizar exactamente el mismo .bashrc en ambos sistemas, existen varios enfoques posibles. Puede crear un enlace simbólico, una envoltura script, una función de shell o (dado que la expansión de alias de Bash no es recursiva) un alias de shell para gls en su sistema Ubuntu. Pero sugiero en su lugar comprobar qué sistema operativo se está utilizando en .bashrc . Aunque obtendrá un ll definido en cada sistema, este enfoque tiene la ventaja de ser autodocumentado. Su .bashrc tendrá sentido para ti en un año, o en 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 prefiere ejecutar Coreutils ls aunque no utilices el ll alias, puede hacer que ls un alias de 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 para detectar un error en una versión anterior de ese script).

1 votos

He seguido esta respuesta y uso: alias ls='gls --color -h --grupo-directorios-primero' alias ll='ls -al'

1 votos

Creo que en su última sección "O si te das cuenta de que normalmente prefieres correr..." hay que cambiar la condicional por: "$OSTYPE" != linux-gnu ya que quieres poner un alias a ls a gls si estás no en un sistema Linux GNU (por ejemplo, si estás en un Mac).

1 votos

@soroushjp Gracias tienes razón. (Ya lo he arreglado; ¡perdón por la espera!)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X