Comment puis-je faire en sorte que la ls
commande dans Max OS X Lion trie les fichiers et les répertoires de la même manière que Ubuntu Linux (insensible à la casse, répertoires PAS en haut, fichiers en points PAS en haut)? Idéalement, je voudrais le faire sans canaliser la sortie vers une autre commande telle que sort.
Par exemple, je veux voir:
foo
Foobar
MyStuff/
.stuff/
test.txt
au lieu de:
.stuff
Foobar
MyStuff/
foo
test.txt
Sous Linux, l' ls
ordre de tri est spécifiquement contrôlé par les paramètres régionaux du système LC_COLLATE
. Quand LC_COLLATE=en_US.UTF-8
, ls triera les éléments comme je le souhaite. Quand LC_COLLATE=C
, ls
sera similaire à OS X.
LC_COLLATE
est défini sur en_US.UTF-8
OS X, mais ls
trie toujours à l'ancienne POSIX
. Est-ce que quelqu'un sait comment je peux faire en sorte que cela se comporte plus comme Linux?
Réponses:
Cela pourrait ne pas être possible:
Source: http://ask.metafilter.com/130292/CaseInsensitive-LS-on-Mac-OS-X
RÉPONSE ORIGINALE
Cette commande ne trie pas les fichiers de points, mais affiche des listes de répertoires supplémentaires
Je me suis approché de ça:
la source
Je sais que cela a été répondu, mais cela fonctionne mieux pour moi:
Il répertorie tous les détails et les trie en ignorant la casse.
la source
Cela me dérange depuis un certain temps maintenant, et je l'ai finalement trié (heh). Après avoir essayé un tas de suggestions qui n'ont pas fonctionné, voici ce qui a fonctionné.
Si vous êtes prêt à installer MacPorts (ou Homebrew ou Fink), la version GNU de ls fait exactement ce que vous voulez. J'utilise MacPorts moi-même, c'est donc l'approche que je vais expliquer:
Téléchargez et installez MacPorts:
http://www.macports.org
Installez le paquet GNU Coreutils:
sudo port install coreutils
Vous devriez maintenant avoir ls GNU:
gls
. Essayez-le dans un répertoire contenant des éléments commençant par des majuscules et des minuscules:gls -U
(L'
-U
option signifie en fait "non trié", mais sur OS X, cela a l'effet souhaité de le rendre insensible à la casse.)Ajoutez cet alias dans votre
.bash_profile
afin que le régulierls
fonctionne comme vous le souhaitez (j'aime la sortie couleur, mais vous pouvez l'omettre si vous le souhaitez; vous n'avez besoin que de-U
):alias ls='gls -U --color'
Notez que l'
-U
option ne fonctionnera probablement pas sur d'autres plates-formes. Dans OS X, il semble toujours faire la bonne chose (peut-être parce que HFS + est effectivement insensible à la casse - "sensible à la casse", techniquement), mais si vous l'essayez sur une boîte Linux, les résultats ne seront probablement pas triés du tout.la source
En ajoutant à ce que Mike a écrit ci-dessus, je suis allé un peu plus loin et j'ai trouvé un moyen de définir vos propres règles de classement.
Les définitions de paramètres régionaux se trouvent dans / usr / share / locale /. Chaque dossier est un environnement local et possède un fichier (ou un lien) LC_COLLATE, qui définit quels symboles sont "identiques" (par exemple, que U, u et ü doivent être considérés comme les mêmes lors de la commande). Vous pouvez dupliquer un répertoire et cela créera une nouvelle définition de paramètres régionaux:
Vous allez maintenant avoir une nouvelle locale appelée 'en_GB.UTF-8-CI' ('CI' pour la casse) et vous pouvez utiliser LC_COLLATE à partir de là.
Maintenant, pour changer LC_COLLATE dans les nouveaux paramètres régionaux, vous pouvez télécharger les sources de paramètres régionaux à partir de http://www.opensource.apple.com/source/adv_cmds/adv_cmds-119/usr-share-locale.tproj/colldef/ , modifiez celui-ci qui est le plus proche de ce que vous voulez et exécutez
et maintenant quand tu cours
vous aurez un tri selon vos règles.
Oui, c'est ce qu'il faut pour rendre le tri «ls» insensible à la casse.
la source
Pour contourner ce problème, vous pouvez utiliser une fonction et un alias:
Cela produit une sortie triée de manière insensible à la casse pour la commande ls standard.
la source
En utilisant
travaille pour moi.
-f désactive officiellement tout tri, mais il semble que le tri HFS d'origine soit visible, ce qui est exactement un tri non sensible à la casse.
Je suppose que cela dépend en fait de savoir si vous avez votre format HD sensible à la casse ou non, mais comme le format HFS sensible à la casse est la valeur par défaut pour les disques système Mac OS X, cela devrait fonctionner pour la majorité des utilisateurs.
la source
Inspiré par la réponse de Mike, j'ai ajouté ce qui suit à / etc / bashrc, et cela fonctionne à merveille dans Mojave. Il répertorie les fichiers cachés à la fin lorsque -a est ajouté, mais cela ne me dérange pas.
Vous pouvez voir la nouvelle configuration en exécutant la commande locale. Pour revenir, supprimez simplement la ligne de / etc / bashrc et reconnectez-vous au terminal.
Notez que ni ls -f1 ni ls -f ne fonctionnaient pour moi à Mojave. Je me suis retrouvé avec une liste vraiment non triée. Seule la solution que j'ai fournie a fonctionné pour moi à Mojave.
la source
.bashrc
ou.zshrc
:alias ls="LC_COLLATE=cs_CZ.ISO8859-2 ls"
Courir:
Vous constaterez probablement que votre
ls
commande a un alias.la source
ls is /bin/ls
. Sur OS X:ls is hashed (/bin/ls)
. Quoi qu'il en soit, même si j'appelle/bin/ls
directement, il ne trie toujours pas selon LC_COLLATE.ls
commande avait un alias à inclure--group-directories-first
. Cela peut encore être fait ailleurs, mais pas un alias.Si vous êtes principalement concerné par l'ordre de tri des fichiers de points, vous pouvez trier par extension : Utilisez la
ls
commande de GNU Fileutils avec l'option--sort=extension
. (Vous pouvez installer GNU Fileutils, par exemple via macports.)la source
ls trie selon LC_COLLATE, c'est juste que la plupart des fichiers LC_COLLATE sont configurés pour effectuer un tri sensible à la casse. http://collation-charts.org/fbsd54/
Il y en a deux qui sont définis pour le tri insensible à la casse: cs_CZ.ISO8859-2 et et_EE.ISO8859-15 et_EE.ISO8859.15 ne trie pas "Z" comme les anglophones le souhaiteraient. cs.CZ.ISO8859-15 fait un bon travail avec l'alphabet, je souhaite juste qu'il trie "~" avant les caractères alphabétiques.
Ma solution est: LC_COLLATE = cs_CZ.ISO8859-2 / bin / ls -FG
Je me demande si un fichier LC_COLLATE personnalisé pourrait être créé pour gérer "." comme vous voulez et "~" comme je veux.
la source