Faça o comando ls classificar por tipo de arquivo (por exemplo, diretórios e extensão de arquivo)

15

Como faço para lsclassificar por tipo de arquivo (por exemplo, diretórios primeiro e depois por extensão de arquivo)? As respostas sugeridas em (Superusuário) Faça ls classificar por tipo de arquivo resultam em erros de opção desconhecidos ls.

Kit
fonte
2
Correção menor em relação ao seu título: ls não é um comando bash; é um executável independente localizado em /bin/ls.
bneely

Respostas:

21

Como você descobriu, a versão do lscomando Darwin não suporta a -X | --sort=extensionopção. Esta opção é exclusiva para a versão GNU de ls.

Você pode obter a versão GNU do lsseu sistema. A maneira mais fácil de fazer isso é através do gerenciador de pacotes Homebrew e do sistema de portabilidade. Com o Homebrew instalado, faça:

brew install coreutils

para adicionar o pacote GNU Core Utilities ao seu sistema. Todos os utilitários terão o prefixo gpara que não colidam com os utilitários padrão do Darwin com o qual o OS X é fornecido.

Com os GNU Core Utilites instalados, agora você pode:

gls -X

E você verá a saída classificada como desejar.

Se você deseja usar o GNU Core Utils em vez dos utilitários que acompanham o OS X, você pode colocar a seguinte linha no seu ~/.bashrcarquivo:

source /usr/local/Cellar/coreutils/8.14/aliases

E você não precisará mais usar o gprefixo nos comandos. Eu direi que isso não é algo totalmente seguro, pois alguns utilitários do GNU diferem dos built-ins do bash e das ferramentas do Darwin em como eles se comportam, o suficiente para que eles possam estragar outras coisas na sua sessão do shell. Então faça isso com cautela.

Ian C.
fonte
1

Com base em uma resposta no artigo vinculado Superusuário :

ls -l |sort -d -k 1.1,1.1r -k 9 | cut -c 50-

Se você quiser ver toda a saída ls -l, deixe de fora a cutpeça.

nohillside
fonte