Créez les fichiers suivants dans un répertoire.
$ touch .a .b a b A B 你好嗎
Ma ls
commande par défaut ignore la présence de points de tête, les confondant avec les autres fichiers.
$ 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 你好嗎
Je peux changer LC_COLLATE
pour mettre les dotfiles en premier.
$ 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 你好嗎
Malheureusement, l'ordre de tri est sensible à la casse, c'est-à-dire A
et B
précède a
et b
. Est - il possible d'imprimer dotfiles premier tout en restant insensible à la casse ( A
et a
precede B
et b
)?
Modifier: tentative de modification de LC_COLLATE
Jusqu'à présent, aucune des réponses ne reproduit pleinement la fonctionnalité de ls
facilement. En théorie, je pourrais en encapsuler certains dans une fonction, mais cela devrait inclure un code détaillé sur (par exemple) comment travailler sans argument vs fournir un répertoire en tant qu'argument. Ou comment gérer un -d
indicateur explicite .
Alternativement, je pensais qu'il pourrait y avoir une meilleure LC_COLLATE
utilisation. Cependant, je n'arrive pas à faire fonctionner cela. J'utilise actuellement LC_COLLATE="en_AU.UTF-8"
. J'ai vérifié /usr/share/i18n/locales/en_AU
(bien que je ne sois pas sûr que ce soit le bon fichier, car je ne vois aucune référence à UTF-8
); J'ai trouvé ce qui suit.
LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE
/usr/share/i18n/locales/iso14651_t1
contient copy "iso14651_t1_common"
. Enfin, /usr/share/i18n/locales/iso14651_t1_common
contient
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
J'ai supprimé cette ligne, exécuté sudo locale-gen
et redémarré mon ordinateur. Malheureusement, cela n'a rien changé.