64 votes

Comment faire pour que "ls" affiche d'abord dotfiles ?

Quelque part, j'ai foiré ma commande ls et maintenant j'obtiens cette commande en exécutant

$ ls -AhHl --color=auto
-rwxr-xr-x 1 clang clang  640 Mar  1 02:46 apple-touch-icon-precomposed.png
-rwxr-xr-x 1 clang clang  784 Jul 12 02:54 crossdomain.xml
-rwxr-xr-x 1 clang clang 1.2K Mar  1 02:46 favicon.ico
drwxr-xr-x 8 clang clang 4.0K Jul 12 23:50 .git
-rw-r--r-- 1 clang clang   17 Feb 29 19:48 .gitignore
-rwxr-xr-x 1 clang clang 1.4K Jul 12 02:54 humans.txt

Qu'est-ce que j'ai fait pour que ls ignore les dotfiles et les ordonne par la première lettre ?

Sortie de locale :

$ locale
LANG=
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

56voto

slhck Points 209720

Cette réponse date un peu. Veuillez consulter les autres réponses, en particulier celles qui utilisent des pseudonymes. ou ls -v .


Essayez d'ajouter

export LC_COLLATE="C"

dans vos dotfiles, ou en changeant le LC_ALL affectation à :

export LC_ALL="C"

Ceci contrôle la façon dont le tri au niveau des caractères fonctionne - alors que la valeur par défaut serait de trier les fichiers point en ligne, ceci fera de sort lister les dotfiles en premier.

Cependant, notez que cela arrêtera la prise en charge de votre locale actuelle dans tous les utilitaires prenant en compte la locale.


Pour aller plus loin, en citant le Manuel de GNU Coreutils (c'est moi qui souligne) :

Si vous utilisez une locale non-POSIX (par exemple, en définissant le paramètre LC_ALL a en_US ), alors sort peut produire une sortie qui est triée différemment que ce à quoi vous êtes habitué.

Dans ce cas, définissez l'option LC_ALL à la variable d'environnement C . Notez que le réglage de seulement LC_COLLATE a deux problèmes. Premièrement, il est inefficace si LC_ALL est également fixé. Deuxièmement, il a un comportement indéfini si LC_CTYPE (ou LANG si LC_CTYPE n'est pas défini) est défini à une valeur incompatible. Par exemple, vous obtenez un comportement non défini si LC_CTYPE es ja_JP.PCK mais LC_COLLATE es en_US.UTF-8 .

43voto

Andrey Loskutov Points 571

Afin d'éviter toute modification de l'ensemble du système sans réelle nécessité, il est possible de modifier uniquement le mode de fonctionnement du système. ls fonctionne pour l'utilisateur actuel en ajoutant l'alias à la section .bashrc :

alias ll='LC_COLLATE=C ls -alF'

Cela trie d'abord les fichiers par points, et permet de gérer correctement (afficher et trier) les jeux de caractères "peu communs" comme le cyrillique. Le seul problème est que le tri sera sensible à la casse.

Quelle: http://ubuntuforums.org/showthread.php?t=816753

27voto

La page de manuel ls(1) donne une liste :

-v tri naturel des numéros de (version) dans le texte

Cela semble changer la façon dont les périodes sont triées et regroupe les dotfiles en premier. J'ai :

alias ls='ls -vAF'
alias ll='ls -l'

dans mon ~/.bashrc.

10voto

Faroul Points 109

Réglage de

LC_ALL="C.UTF-8"

fonctionne bien pour moi - les umlauts et "ls -la" listent les fichiers point en premier.

1voto

jsbueno Points 191

Une idée originale

Clause de non-responsabilité : Ceci va être exagéré pour la plupart d'entre vous. Mais je fais ce métier depuis 1995 et j'ai les compétences nécessaires pour créer mon monde exactement comme je le souhaite. Alors, pourquoi pas ?

J'aime beaucoup utiliser différentes méthodes de tri avec ls notamment -rt (qui est trié par r everse modifié t ime). J'ai donc décidé d'essayer quelque chose de fou et d'utiliser awk pour faire mon tri.

# save as ~/.ls.awk
# inpsired by http://superuser.com/questions/448291/how-can-i-make-ls-show-dotfiles-first

{
    if($1 == "total"){
        print $0
        next
    }
    # may need to adjust $9 to match your name column
    if(match($9, /^(\033\[[0-9]*m)*\./)) # optionally look past xterm highlighting like: ^[[34m
        df[++dd] = $0
    else
        nf[++nn] = $0
}
END{
    while (++d in df)
        print df[d]
    while (++n in nf)
        print nf[n]
}

Maintenant, au lieu de définir un alias bash, je définis une fonction bash (parce que les alias peuvent seulement ajouter des arguments à la fin, mais les fonctions peuvent les utiliser n'importe où)

ll(){ CLICOLOR_FORCE=1 ls -lhA $* | awk -f ~/.ls.awk; }

Pour voir les résultats

Créons quelques fichiers échantillons :

for n in 4 .4 3 .3 2 .2 1 .1; do touch $n; sleep 1; done

Utilisation de ls simple

$ ls -lA
total 8
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
$ ls -lArt

total 8
-rwxr-xr-x  1 bbronosky  staff  285 Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 4
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 3
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .3
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 2
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .2
-rwxr-xr-x  1 bbronosky  staff    0 Dec  1 00:25 1
-rw-r--r--  1 bbronosky  staff    0 Dec  1 00:25 .1

En utilisant ma fonction qui filtre avec awk

$ ll
total 8
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4

$ ll -rt
total 8
-rwxr-xr-x  1 bbronosky  staff   285B Nov 29 13:14 .ls.awk
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .4
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .3
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .2
-rw-r--r--  1 bbronosky  staff     0B Dec  1 00:25 .1
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 4
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 3
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 2
-rwxr-xr-x  1 bbronosky  staff     0B Dec  1 00:25 1

Vous pouvez voir mon implémentation de ceci ici https://github.com/RichardBronosky/dotfiles/commit/6170c0a9

Ce qui est le plus important, c'est qu'il s'agit d'un cadre permettant de modifier votre ls sortie. Vous pouvez faire tout ce que vous voulez avec ce filtre awk. Vous pourriez vouloir que ce soit les répertoires, puis les dotfiles, puis tout le reste. Une fois que vous savez comment gérer les couleurs de votre xterm, ce n'est pas trop difficile. C'est vous qui décidez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X