Comment puis-je listr les files par type avec ls?

Lorsque j'utilise la command ls avec l'option -l , la première string de lettres donne l'information sur chaque file et la première lettre de cette string donne le type du file. ( d = directory, - = file standard, l = lien, etc.)

Comment puis-je filterr les files en fonction de cette première lettre?

Vous pouvez filterr tout sauf les directorys en utilisant grep cette façon:

 ls -l | grep '^d' 

le ^ indique que le motif est au début de la ligne. Remplacez d par - , l , etc., selon le cas.

Vous pouvez bien sûr utiliser d'autres commands pour searchr directement des types spécifiques (par ex find . -maxdepth 1 -type d ) ou utiliser ls -l | sort ls -l | sort pour regrouper les types similaires en fonction de ce premier caractère, mais si vous voulez filterr, vous devez utiliser grep pour sélectionner uniquement les lignes appropriées de la sortie.

Si vous voulez afficher toutes les sorties mais que vous avez des files de type similaire listés set, vous pouvez sortinger la sortie sur le premier caractère de chaque ligne:

 ls -l | sort -k1,1 

La command ls traite des noms de files , qui sont enregistrés dans les data structures d'annuaire. Le file lui-même ne s'intéresse donc pas vraiment au file, y compris le "type" d'un file.

Une command plus adaptée au travail sur les files réels , et non seulement sur les noms, est la find . Il a une option qui répond directement à votre question sur la façon de filterr la list sur le type de file.

Cela donne une list du directory courant similaire à ls -l :

 find . -maxdepth 1 -ls 

Par défaut, find lists de directorys récursivement, ce qui est désactivé en limitant la profondeur de search à 1.
Vous pouvez laisser le . , mais je l'ai inclus pour montrer que les directorys doivent être listés avant les options.

Avec -type , vous pouvez filterr par type de file, qui est exprimé par f ou d pour les files simples ou les directorys:

 find . -maxdepth 1 -type d -ls 

Il existe d'autres valeurs de filter pour -type , notamment l pour les liens symboliques.
Notez qu'il y a une complication avec des liens symboliques :
Il y a deux types de files dans ce cas: l , indiquant un lien symbolique, et quelque chose comme f , indiquant le type du file lié. Il existe des options pour spécifier comment gérer cela, afin que vous puissiez choisir.


De l' man find :

  -type c File is of type c: b block (buffered) special c character (unbuffered) special d directory p named pipe (FIFO) f regular file l symbolic link; this is never true if the -L option or the -follow option is in effect, unless the sym‐ bolic link is broken. If you want to search for symbolic links when -L is in effect, use -xtype. s socket D door (Solaris) 

et pertinent pour le traitement des liens symboliques:

  -xtype c The same as -type unless the file is a symbolic link. For symbolic links: if the -H or -P option was specified, true if the file is a link to a file of type c; if the -L option has been given, true if c is `l'. In other words, for sym‐ bolic links, -xtype checks the type of the file that -type does not check. 

et

  -P Never follow symbolic links. This is the default behav‐ iour. When find examines or prints information a file, and the file is a symbolic link, the information used shall be taken from the properties of the symbolic link itself. -L Follow symbolic links. When find examines or prints infor‐ mation about files, the information used shall be taken from the properties of the file to which the link points, not from the link itself (unless it is a broken symbolic link or find is unable to examine the file to which the link points). Use of this option implies -noleaf. If you later use the -P option, -noleaf will still be in effect. If -L is in effect and find discovers a symbolic link to a subdirectory during its search, the subdirectory pointed to by the symbolic link will be searched. When the -L option is in effect, the -type predicate will always match against the type of the file that a symbolic link points to rather than the link itself (unless the sym‐ bolic link is broken). Using -L causes the -lname and -ilname predicates always to return false. -H Do not follow symbolic links, except while processing the command line arguments. [...] 

Si vous êtes le plus préoccupé de order les dossiers des autres types de files, vous pouvez aller avec

 ls --group-directories-first 

Sinon, je pense que vous devez canaliser la sortie de ls -l par sortinger ou par grep comme répondu par Anthon

 ls -l | sort 

Cela permettra de sortinger le résultat en fonction de 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 besoin uniquement des noms de files, vous pouvez essayer:

 ls -l | sort | cut -f 2 -d ' ' 

Ou quelque chose de similaire (cette command sortinge puis fractionne chaque ligne en utilisant le délimiteur d'espace, puis renvoie le second groupe.

 ls -l | awk '/^d/{print $NF} 

awk va attraper tout ce qui commence par d. comme d est pour le directory et vous devez imprimer le dernier champ pour listr le nom du directory