Como posso fazer o ls
comando no Max OS X Lion classificar arquivos e diretórios semelhantes ao Ubuntu Linux (sem distinção entre maiúsculas e minúsculas, diretórios NÃO na parte superior, arquivos de ponto NÃO na parte superior)? Idealmente, eu gostaria de fazer isso sem canalizar a saída para outro comando como classificar.
Por exemplo, eu quero ver:
foo
Foobar
MyStuff/
.stuff/
test.txt
ao invés de:
.stuff
Foobar
MyStuff/
foo
test.txt
No Linux, a ls
ordem de classificação é controlada pelo código do idioma do sistema, especificamente LC_COLLATE
. Quando LC_COLLATE=en_US.UTF-8
, ls classificará os itens como eu quiser. Quando LC_COLLATE=C
, ls
será semelhante ao OS X.
LC_COLLATE
está definido en_US.UTF-8
no OS X, mas ls
ainda classifica da POSIX
maneira antiga . Alguém sabe como eu posso fazer isso se comportar mais como o Linux?
Respostas:
Pode não ser possível:
Fonte: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X
RESPOSTA ORIGINAL
Este comando não classifica arquivos de ponto, mas mostra listagens de diretório adicionais
Cheguei perto disso:
fonte
Eu sei que isso foi respondido, mas esse trabalho é melhor para mim:
Ele lista todos os detalhes e os classifica ignorando maiúsculas e minúsculas.
fonte
Isso já está me incomodando há um tempo, e finalmente resolvi (heh). Depois de tentar várias sugestões que não funcionaram, aqui está o que funcionou.
Se você deseja instalar o MacPorts (ou Homebrew, ou Fink), a versão GNU do ls faz exatamente o que você deseja. Eu mesmo uso o MacPorts, então essa é a abordagem que vou explicar:
Baixe e instale o MacPorts:
http://www.macports.org
Instale o pacote GNU Coreutils:
sudo port install coreutils
Agora você deve ter ls GNU:
gls
. Experimente em um diretório que contém itens que começam com letras maiúsculas e minúsculas:gls -U
(A
-U
opção realmente significa "não classificado", mas no OS X tem o efeito desejado de torná-lo sem distinção entre maiúsculas e minúsculas.)Adicione esse alias no seu
.bash_profile
para que o regularls
funcione da maneira que você deseja (eu gosto da saída de cores, mas você pode omitir isso se quiser; você só precisa do-U
):alias ls='gls -U --color'
Observe que a
-U
opção provavelmente não funcionará em outras plataformas. No OS X, sempre parece fazer a coisa certa (talvez porque o HFS + não faça distinção entre maiúsculas e minúsculas - tecnicamente), mas se você tentar em uma caixa Linux, os resultados provavelmente não serão ordenado em tudo.fonte
Além do que Mike escreveu acima, eu levei um pouco mais longe e encontrei uma maneira de definir suas próprias regras de agrupamento.
As definições de localidade estão localizadas em / usr / share / locale /. Cada pasta é um código de idioma e possui um arquivo (ou um link) LC_COLLATE, que define quais símbolos são "iguais" (por exemplo, U, u e ü devem ser considerados os mesmos ao fazer o pedido). Você pode duplicar um diretório e isso criará uma nova definição de localidade:
Agora você terá um novo código de idioma chamado 'en_GB.UTF-8-CI' ('CI' para não diferenciar maiúsculas de minúsculas) e poderá usar LC_COLLATE a partir daí.
Agora, para alterar LC_COLLATE no novo código do idioma, você pode fazer o download das fontes de código do idioma em http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ , edite o código mais próximo do que você deseja e executa
e agora quando você corre
você terá a classificação de acordo com suas regras.
Sim, é isso que é necessário para tornar 'ls' sem distinção entre maiúsculas e minúsculas.
fonte
Como solução alternativa, você pode usar uma função e um alias:
Isso produz uma saída classificada sem distinção entre maiúsculas e minúsculas para o comando ls padrão.
fonte
Usando
funciona para mim.
-f desativa oficialmente qualquer classificação, mas parece que a classificação original do HFS brilha, o que é exatamente uma classificação que não diferencia maiúsculas de minúsculas.
Eu acho que depende realmente de você ter ou não seu formato HD sensível a maiúsculas e minúsculas, mas como o formato HFS sensível a maiúsculas e minúsculas é o padrão para os discos do sistema Mac OS X, isso deve funcionar para a maioria dos usuários.
fonte
Inspirado pela resposta de Mike, adicionei o seguinte ao / etc / bashrc, e ele funciona muito bem no Mojave. Ele lista os arquivos ocultos no final quando -a é adicionado, mas isso não me incomoda.
Você pode ver a nova configuração executando o comando locale. Para reverter, basta remover a linha do / etc / bashrc e efetuar login novamente no terminal.
Observe que nem ls -f1 nem ls -f funcionaram para mim no Mojave. Acabei com uma lista verdadeiramente não classificada. Somente a solução que forneci funcionou para mim no Mojave.
fonte
.bashrc
ou.zshrc
:alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
Corre:
Você provavelmente descobrirá que seu
ls
comando está com alias.fonte
ls is /bin/ls
. No OS X:ls is hashed (/bin/ls)
. De qualquer forma, mesmo se eu ligar/bin/ls
diretamente, ele ainda não será classificado de acordo com LC_COLLATE.ls
comando tinha um alias para incluir--group-directories-first
. Ainda pode ser feito em outro lugar, apenas não um pseudônimo.Se você está preocupado principalmente com a ordem de classificação dos arquivos de pontos, você pode classificar por extensão : Use o
ls
comando do GNU Fileutils com a opção--sort=extension
. (Você pode instalar o GNU Fileutils, por exemplo, através de macports.)fonte
ls está classificando de acordo com LC_COLLATE, mas a maioria dos arquivos LC_COLLATE está configurada para fazer a distinção entre maiúsculas e minúsculas. http://collation-charts.org/fbsd54/
Existem dois que estão definidos para classificação sem distinção entre maiúsculas e minúsculas: cs_CZ.ISO8859-2 e et_EE.ISO8859-15 et_EE.ISO8859.15 não classifica "Z" da maneira que os falantes de inglês gostariam. cs.CZ.ISO8859-15 faz um bom trabalho com o alfabeto, eu gostaria que ele classificasse "~" antes dos caracteres alfabéticos.
Minha solução é: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG
Gostaria de saber se um arquivo LC_COLLATE personalizado pode ser criado para manipular "." do jeito que você quer e "~" do jeito que eu quero.
fonte