Lorsque j'utilise la ls
commande avec l'option -l
, la première chaîne de lettres donne les informations sur chaque fichier et la première lettre de cette chaîne donne le type du fichier. ( d
= répertoire, -
= fichier standard, l
= lien, etc.)
Comment filtrer les fichiers en fonction de cette première lettre?
Réponses:
Vous pouvez filtrer tout sauf les répertoires de
grep
cette façon:le
^
indique que le motif se trouve au début de la ligne. Remplacerd
par-
,l
, etc., selon le cas.Vous pouvez bien sûr utiliser d'autres commandes pour rechercher directement des types spécifiques (par exemple
find . -maxdepth 1 -type d
) ouls -l | sort
pour regrouper des types similaires en fonction de ce premier caractère, mais si vous souhaitez filtrer, vous devez utilisergrep
pour sélectionner uniquement les lignes appropriées dans la sortie.la source
ls -lL
.-L
suivra les liens symboliques pour montrer s'il est lié à un répertoire ou à un fichier.Si vous souhaitez afficher toutes les sorties mais que les fichiers de type similaire sont répertoriés ensemble, vous pouvez trier les sorties sur le premier caractère de chaque ligne:
la source
La commande
ls
traite des noms de fichiers , qui sont enregistrés dans les structures de données du répertoire. Il ne se soucie donc pas vraiment du fichier lui-même, y compris du "type" d'un fichier.Une commande qui est plus adaptée pour travailler sur des fichiers réels , pas seulement ses noms, l'est
find
. Il a une option qui répond directement à votre question sur la façon de filtrer la liste sur le type de fichier.Cela donne une liste du répertoire actuel similaire à
ls -l
:Par défaut,
find
répertorie les répertoires de manière récursive, ce qui est désactivé en limitant la profondeur de recherche à 1.Vous pouvez laisser de côté le
.
, mais je l'ai inclus pour montrer que les répertoires doivent être répertoriés avant les options.Avec
-type
, vous pouvez filtrer par type de fichier, qui s'exprime sous la formef
oud
pour des fichiers ou répertoires simples:Il existe d'autres valeurs de filtre pour
-type
, notammentl
pour les liens symboliques.Notez qu'il y a une complication avec les liens symboliques :
il y a deux types de fichier dans ce cas
l
:, indiquant un lien symbolique, et quelque chose commef
, indiquant le type du fichier lié. Il existe des options pour spécifier comment gérer cela, vous pouvez donc choisir.De
man find
:et pertinentes pour la gestion des liens symboliques:
et
la source
Si vous souhaitez surtout commander les dossiers des autres types de fichiers, vous pouvez utiliser
sinon, je pense que vous devez diriger la sortie de ls -l via sort ou grep comme l'a répondu Anthon
la source
awk va attraper tout ce qui commence par d. comme d pour le répertoire et vous devez imprimer le dernier champ pour lister le nom du répertoire
la source
Cela triera le résultat selon l'ordre alphabétique de chaque résultat. Si le premier caractère est le critère que vous voulez, c'est tout. Si vous avez seulement besoin des noms de fichiers, vous pouvez essayer:
Ou quelque chose de similaire (cette commande trie puis fractionne chaque ligne à l'aide du délimiteur d'espace, puis renvoie le deuxième groupe.
la source