Diga ao `ls` para classificar por códigos ASCII regulares, não de forma" inteligente "

13

Eu tenho alguns arquivos e os lsclassifica assim:

a
_b
c

mas eu quero ter

_b
a
c

Como eu posso fazer isso?

Martin Ueding
fonte
2
Posso perguntar por quê?
RolandiXor
2
Eu uso o sublinhado para indicar diretórios especiais que precisam ir para o topo. Na minha pasta de projetos, tenho proj_a, proj_b e _old_projects. Não adianta se essa pasta estiver dentro dos o-projects.
Martin Ueding

Respostas:

9

Como um comando único, você pode fazer isso:

LC_COLLATE=C ls

Ou você pode adicionar export LC_COLLATE="C" ao seu .bashrc para torná-lo permanente (pode haver resultados inesperados em outros lugares).

Mais informações nos fóruns do Ubuntu .

misterben
fonte
1
Acho que vou alias ls com isso, para que não tenha efeitos colaterais.
Martin Ueding
Isso não funciona para mim. Eu recebo este -> paste.pocoo.org/show/403333 (é alemão mas não importa)
dAnjou
2
O @dAnjou LC_COLLATE=Cls define a ordem de classificação POSIX tradicional, que é por ASCII na qual as maiúsculas vêm antes do sublinhado. Para ordenar os sublinhados antes das maiúsculas, é necessário entrar no castelo e criar uma definição de localidade personalizada em / usr / share / i18n / locales.
misterben
2
Isso pode ter funcionado no passado, mas não está funcionando no Ubuntu 12.04.
Mikel
1
A partir do Ubuntu 14.04, LC_COLLATE=C lsnão funciona, mas LC_ALL=C lsfunciona.
jwodder
6

Caso não exista uma maneira integrada de fazer isso, você poderá usar uma substituição simples para sort:

#!/usr/bin/env python

import sys

for i in sorted(sys.stdin):
    sys.stdout.write(i)

Salve-o, por exemplo, em /bin/pysorte torne-o executável ( sudo cp whatever.py /bin/pysorte sudo chmod a+x /bin/pysort) e execute-o como ls | pysort:

stefano@lenovo:~/t$ ls | pysort
_b
a
c
Stefano Palazzo
fonte
1
Eu provavelmente colocaria isso, ~/binmas um bom substituto. Provavelmente é melhor usar globbing no python, pois a saída de ls pode ser estranha se um nome de arquivo contiver uma nova linha.
Martin Ueding
1

seria ls | sortnão fazer exatamente o que você precisa?

Philippe De Brouwer
fonte
1
não, que classifica como "uma _B c"
Stefano Palazzo
1
não! e classificar também não tem uma opção para este :-)
Rinzwind
2
É estranho que tipo tem tantas maneiras de classificação especial, mas não o "valor ASCII uso" one ...
Martin Ueding