Crie os seguintes arquivos em um diretório
$ touch .a .b a b A B 你好嗎
Meu lspedido 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, Ae Bprecedem ae b. Existe uma maneira de imprimir arquivos de ponto primeiro, mantendo a distinção entre maiúsculas Ae minúsculas ( e aprecedendo Be b)?
Editar: tentando modificar LC_COLLATE
Até agora, nenhuma das respostas replica totalmente a funcionalidade lsfacilmente. É 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 -dbandeira explícita .
Como alternativa, pensei que talvez pudesse ser melhor LC_COLLATEusar. 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_t1contém copy "iso14651_t1_common". Finalmente, /usr/share/i18n/locales/iso14651_t1_commoncontém
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
Excluí esta linha, executei sudo locale-gene reiniciei o meu computador. Infelizmente, isso não mudou nada.