Crie os seguintes arquivos em um diretório
$ touch .a .b a b A B 你好嗎
Meu ls
pedido padrão ignora a presença de pontos iniciais, misturando-os com os outros arquivos.
$ ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
Eu posso mudar LC_COLLATE
para colocar os arquivos de ponto em primeiro lugar.
$ LC_COLLATE=C ls -Al
total 0
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 .b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 A
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 B
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 a
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:03 b
-rw-r--r-- 1 sparhawk sparhawk 0 Jun 8 17:06 你好嗎
Infelizmente isso faz com que a ordem de classificação entre maiúsculas e minúsculas, ou seja, A
e B
precedem a
e b
. Existe uma maneira de imprimir arquivos de ponto primeiro, mantendo a distinção entre maiúsculas A
e minúsculas ( e a
precedendo B
e b
)?
Editar: tentando modificar LC_COLLATE
Até agora, nenhuma das respostas replica totalmente a funcionalidade ls
facilmente. É concebível que eu poderia agrupar alguns deles em uma função, mas isso teria que incluir algum código detalhado sobre (por exemplo) como trabalhar sem argumento versus fornecer um diretório como argumento. Ou como lidar com uma -d
bandeira explícita .
Como alternativa, pensei que talvez pudesse ser melhor LC_COLLATE
usar. No entanto, não consigo fazer isso funcionar. Atualmente estou usando LC_COLLATE="en_AU.UTF-8"
. Eu verifiquei /usr/share/i18n/locales/en_AU
(embora não tenha certeza se esse é o arquivo certo, pois não consigo ver nenhuma referência UTF-8
); Encontrei o seguinte.
LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE
/usr/share/i18n/locales/iso14651_t1
contém copy "iso14651_t1_common"
. Finalmente, /usr/share/i18n/locales/iso14651_t1_common
contém
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
Excluí esta linha, executei sudo locale-gen
e reiniciei o meu computador. Infelizmente, isso não mudou nada.