--group-directory-first-option para o comando "ls"

13

Estou usando o Ubuntu 16.04 e OS X.

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

Este é um apelido no meu bashrc, mas de alguma forma a --group-directories-firstopção ficou ilegal no OS X depois que eu atualizei o meu bash com o Homebrew. No meu desktop Ubuntu, ainda posso usar essa opção.

Em qual versão do Bash, a opção não é suportada? A versão do Bash na minha máquina OS X dizGNU bash, Version 4.4.12(1)-release (x86_64-apple-darwin15.6.0)

Eu gostaria de usar a --group-directories-firstopção novamente. Existe alguma maneira de conseguir isso?

IzumiSy
fonte
11
Você está usando o gnu correutils lsou o macOS ls? Você já tentou o outro?
bmike

Respostas:

12

Instale coreutilscom Homebrew e alias llpara gls -Flh --group-directories-first.

  • brew install coreutils instala o GNU Coreutils , caso não esteja instalado.
  • Use alias ll='gls -Flh --group-directories-first'em .bashrc.
    (Se você deseja usar o mesmo .bashrcarquivo nos dois sistemas operacionais, veja abaixo.)

No Ubuntu, lsé fornecido pelo GNU Coreutils , que o Ubuntu sempre possui. É por isso que lssuporta --group-directories-firstno Ubuntu. Provavelmente você já usava a versão GNU Coreutils do lsmacOS antes, que o Homebrew instala como, glsmas que pode ser usado de lsvárias maneiras.

lsé um comando externo, não um Bash embutido. O uso de uma versão ou compilação diferente do Bash não deve afetá-lo. Não sei o que aconteceu quando você atualizou o Bash usando o Homebrew. Talvez mais do que o Bash também tenha sido atualizado; talvez você tenha umalsfunção ou alias do shell definida em um arquivo de configuração global que foi substituído; talvez você tenha um link simbólicolsque apontouglse foi substituído; talvez você ainda tenha algo assim, mas o seu$PATHmudou. O que quer que tenha acontecido, o GNU Coreutils lssuporta--group-directories-first , e mudar para ele (como acredito que bmike está sugerindo ) deve resolver seu problema.

Se, por algum motivo, você quiser usar exatamente o mesmo .bashrcarquivo nos dois sistemas, existem algumas abordagens possíveis. Você pode criar um link simbólico, script de wrapper, função de shell ou (porque a expansão do alias do Bash não é recursiva) para o glsseu sistema Ubuntu. Mas eu sugiro que em vez de verificação, que OS está sendo usado em .bashrc. Embora você obtenha um llalias diferente definido em cada sistema, essa abordagem tem o benefício de ser auto-documentada. Você .bashrcfará sentido para você em um ano ou um mês.

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 se você acha que geralmente prefere executar o Coreutils ls, mesmo se não estiver usando o llalias, você pode criar lsum alias para gls:

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

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

(Agradecemos a soroushjp por detectar um erro em uma versão anterior desse script.)

Eliah Kagan
fonte
Eu segui esta resposta e usei: alias ls = 'gls --color -h --group-directory-first' alias ll = 'ls -al'
user2875289
11
Eu acho que em sua última seção "Ou se você achar que geralmente preferem correr ..." , as necessidades condicionais de ser alterado para: "$OSTYPE" != linux-gnu , já que você quer de alias ls para gls se você estiver não em um sistema Linux GNU (por exemplo, você está em um Mac).
soroushjp
11
@soroushjp Obrigado - você está certo. (Eu fixo-lo, desculpe sobre a espera!)
Elias Kagan