Je voudrais utiliser le ls
pour afficher d'abord les répertoires puis les fichiers. J'ai essayé :
ls -la | sort -k 1
Mais j'ai reçu une mauvaise commande.
Je voudrais utiliser le ls
pour afficher d'abord les répertoires puis les fichiers. J'ai essayé :
ls -la | sort -k 1
Mais j'ai reçu une mauvaise commande.
J'aime tellement *nix et j'aime voir l'inventivité qui entre dans certaines de ces réponses...
Le mien est loin d'être aussi sophistiqué sous GNU Linux :
alias ls='ls --color -h --group-directories-first'
Étant donné que je suis plus à l'aise avec mes applications CLI linux, j'ai tendance à mettre également à jour coreutils sous OSX :
brew install coreutils
alias ls='/usr/local/bin/gls --color -h --group-directories-first'
La commande suivante listera les répertoires en premier, les fichiers ordinaires en second, et les liens en troisième.
ls -la | grep "^d" && ls -la | grep "^-" && ls -la | grep "^l"
De plus, il serait très judicieux de créer une alias pour cette commande afin d'économiser les frappes au clavier.
Edit :
Si vous voulez d'abord les répertoires, et ensuite tout ce qui n'est pas un répertoire, utilisez ceci :
ls -la | grep "^d" && ls -la | grep -v "^d"
Pour les utilisateurs de mac, vous pouvez installer coreutils .
Cette formule fournit les implémentations des utilitaires de base GNU, et pour les commandes qui sont également fournies par macOS, elles ont été installées avec le préfixe "g".
brew install coreutils
gls --color -h --group-directories-first
Vous pouvez encore vous simplifier la vie avec un alias.
alias ls='gls --color -h --group-directories-first'
Il y a certaines choses que je veux voir dans une liste d'annuaire, et jusqu'à présent aucune des réponses ici ne répond à toutes les exigences ci-dessous. Mes exigences pour une liste d'annuaire :
./
y ../
), des fichiers et des liens--group-directories-first
ne fonctionnent pas dans Git Bash pour WindowsAprès avoir beaucoup bricolé, j'ai finalement trouvé une ligne unique (bien qu'elle soit très longue ;-)) dont je suis satisfait. Je l'ai assigné à un alias nommé 'dir' :
ls -dlF --color * .* | head -n2 && ls -AlF | LC_ALL=C grep "^d" |
LC_ALL=C sort -k 9df && ls -AlF | LC_ALL=C grep "^[l-]" |
LC_ALL=C sort -k 9df && echo -e `find -maxdepth 1 -type d ! -name . |
wc -l` Dir\(s\) `du -hs | cut -f 1`\\t\\t`find -maxdepth 1 -type f |
wc -l` File\(s\) `find -maxdepth 1 -type f -print0 | du -ch --files0-from=- |
tail -n 1 | cut -f 1`\\t\\t`find -maxdepth 1 -type l | wc -l` Link\(s\)
Pour rendre les choses plus faciles à gérer, j'ai créé des commandes distinctes pour afficher chaque segment de la liste des répertoires à ma convenance, puis je les ai assemblées en utilisant la commande &&
opérateur.
ls -dlF --color * .* | head -n2
-- Extrait ./
y ../
. Nous ne voulons pas les faire passer par sort
parce qu'ils sont déjà dans le bon ordre, et le fait de les trier peut entraîner ../
étant listé en premier. Le site -d
option est de se débarrasser de la ligne "total" ; j'aime ajouter -F
pour afficher la barre oblique de fin pour les répertoires (il marquera également les liens symboliques avec "@" lorsque vous effectuez une recherche simple de type ls -F
).
ls -AlF | LC_ALL=C grep "^d" | LC_ALL=C sort -k 9df
-- Extraire les répertoires et les trier par nom de fichier (9ème colonne), en ignorant les caractères non-alpha/espace ( d
) et la casse des caractères (option f
option). Le site ls -A
L'option exclut ./
y ../
de la liste puisque nous les avons déjà extraites à l'étape précédente. J'ai tendance à préfixer tous les grep
y sort
avec les commandes LC_ALL=C
locale reset afin que (1) la sortie soit cohérente à travers les shells Unix, et (2) vous pouvez parfois voir des performances plus rapides car il n'a plus la surcharge du lourd jeu de caractères UTF-8 à gérer.
ls -AlF | LC_ALL=C grep "^[l-]" | LC_ALL=C sort -k 9df
-- Cette étape est similaire à la précédente, mais cette fois-ci, nous trions les fichiers et les liens symboliques.
find -maxdepth 1 -type d ! -name . | wc -l
-- Obtenez le nombre de répertoires, à l'exclusion ./
y ../
.
find -maxdepth 1 -type f | wc -l
-- Obtenir le nombre de fichiers.
find -maxdepth 1 -type l | wc -l
-- Obtenir le nombre de liens symboliques.
du -hs | cut -f 1
-- Extraire la taille totale de tous les sous-répertoires dans un format lisible par l'homme.
find -maxdepth 1 -type f -print0 | du -ch --files0-from=- | tail -n 1 | cut -f 1
-- Extraire la taille totale de tous les fichiers dans un format lisible par l'homme.
Voyons voir notre nouvelle dir
alias en action !
AVANT :
$ ls -alF
total 22
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
APRÈS :
$ dir
drwxr-xr-x 13 Tom Administ 4096 Oct 25 02:38 ./
drwxr-xr-x 3 Tom Administ 0 Dec 24 2014 ../
drwxr-xr-x 1 Tom Administ 0 Jan 24 2015 .gem/
drwxr-xr-x 1 Tom Administ 4096 Dec 28 2014 .ssh/
drwxr-xr-x 1 Tom Administ 0 Oct 24 22:20 tmp/
drwxr-xr-x 4 Tom Administ 0 Jan 24 2015 .travis/
drwxr-xr-x 15 Tom Administ 4096 Sep 17 01:23 .VirtualBox/
-rw-r--r-- 1 Tom Administ 615 Oct 25 02:38 .aliases
-rw-r--r-- 1 Tom Administ 12742 Oct 24 11:47 .bash_history
-rw-r--r-- 1 Tom Administ 3234 Oct 24 15:06 .bash_profile
-rw-r--r-- 1 Tom Administ 586 Oct 24 03:53 .gitconfig
-rw-r--r-- 1 Tom Administ 4907 Oct 24 15:16 profile
-rw-r--r-- 1 Tom Administ 6645 Oct 25 02:38 _viminfo
5 Dir(s) 2.8M 6 File(s) 31K 0 Link(s)
Un inconvénient mineur est que vous ne pouvez pas avoir de listes colorées, car les caractères de contrôle de couleur entourant les noms de fichiers rendent le tri trop peu fiable.
UPDATE
L'alias ci-dessus était douloureusement lent lorsqu'il était exécuté à partir du répertoire racine d'un système de fichiers profond, j'ai donc mis à jour cette commande plus simple mais beaucoup plus performante :
ls -AFoqv --color --group-directories-first | tail -n +2 && find -maxdepth 1 -type f -printf '%s\n' | awk '{total+=$1} END {print total" bytes"}'
Exemple de sortie :
$ dir
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .aws/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .gem/
drwxr-xr-x 1 Tom 0 Mar 29 19:32 .ssh/
drwxr-xr-x 1 Tom 0 Mar 29 13:49 .zbstudio/
drwxr-xr-x 1 Tom 0 Jun 16 2016 temp/
drwxr-xr-x 1 Tom 0 Jul 13 2016 vimfiles/
-rw-r--r-- 2 Tom 365 Mar 30 10:37 .aliases
-rw-r--r-- 1 Tom 16028 Mar 30 12:12 .bash_history
-rw-r--r-- 2 Tom 2807 Mar 30 12:12 .bash_profile
-rw-r--r-- 2 Tom 2177 Mar 29 23:24 .functions
-rw-r--r-- 1 Tom 1091 Mar 30 10:34 .gitconfig
-rw-r--r-- 1 Tom 8907 Mar 29 14:45 _viminfo
-rw-r--r-- 1 Tom 2444 Jul 13 2016 _vimrc
33819 bytes
Puisque la nouvelle version de Git Bash pour Windows supporte --group-directories-first
nous n'avons plus besoin de nous rabattre sur sort
. Même si le nouvel alias n'affiche pas autant d'informations que l'alias précédent, les gains de performance en valent la peine. En prime, vous obtenez aussi des couleurs !
Vous avez plusieurs choix, selon que vous souhaitez conserver l'ordre alphabétique.
Vous pourriez simplement essayer :
ls -al | sort -k1 -r
ou ceci, pour conserver l'ordre alphabétique des fichiers ayant les mêmes permissions :
ls -al | sort -k1,1 -k9,9 -r
ou, comme l'a dit eleven81 (mais cette version énumère tout) :
ls -la | grep "^d" && ls -la | grep "^-" && ls -al | grep -v "^[d|-]"
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.