Créez les fichiers suivants dans un répertoire.
$ touch .a .b a b A B 你好嗎
Ma lscommande 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 Aet Bprécède aet b. Est - il possible d'imprimer dotfiles premier tout en restant insensible à la casse ( Aet aprecede Bet b)?
Modifier: tentative de modification de LC_COLLATE
Jusqu'à présent, aucune des réponses ne reproduit pleinement la fonctionnalité de lsfacilement. 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 -dindicateur explicite .
Alternativement, je pensais qu'il pourrait y avoir une meilleure LC_COLLATEutilisation. 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_t1contient copy "iso14651_t1_common". Enfin, /usr/share/i18n/locales/iso14651_t1_commoncontient
<U002E> IGNORE;IGNORE;IGNORE;<U002E> # 47 .
J'ai supprimé cette ligne, exécuté sudo locale-genet redémarré mon ordinateur. Malheureusement, cela n'a rien changé.