Je ne sais pas s'il ls
est capable d'afficher une colonne de type de fichier.
Faire une recherche rapide en ligne et rechercher le man
n'a pas révélé une telle capacité. Est-il capable de faire ça?
Clarification: Ceci est particulièrement utile si les fichiers n'ont pas d'extension.
Mettre à jour
Au 28-04-2018, les réponses étaient assez intéressantes, mais elles ne fournissaient pas ce que je cherchais. Plus précisement,
file
donne les types de fichiers réels mais ne s'intègre pas bien avecls
. Plus précisément, j'utilisels -lhtrpG --group-directories-first --color=always
ls -F
est unels
solution mais elle fournit des symboles et non une colonne de types de fichiers réels.
Pour cette raison, je n'ai marqué aucune des réponses comme réponse que je recherche.
la source
ls -lahtrpF --group-directories-first --color=always /dev
ouls -lsahG /dev
, et pour le programme lisiblels -lsa /dev
. voir laman ls
documentation pour plus de détails.Réponses:
file
est certainement le bon choix pour obtenir les informations de type de fichier que vous souhaitez. Pour combiner sa sortie avec celle dels
je propose d'utiliserfind
:Cela trouve chaque fichier dans le répertoire courant et imprime la sortie de
ls -dils
ainsi que la sortie defile -b
pour lui, chacun sur une ligne propre. Exemple de sortie:Mais, comme vous ne voulez pas de ligne de type de fichier mais plutôt une colonne de type de fichier , voici un moyen de se débarrasser du caractère de nouvelle ligne entre les lignes:
Exemple de sortie:
Cette nouvelle colonne est assez longue, nous allons donc tout couper de la première virgule:
La sortie de cela ressemble à ceci:
Ce n'est pas très pratique, alors pourquoi pas un
alias
? Avec la ligne suivante dans votre~/.bash_aliases
fichier, il vous suffit d'exécuterlsf
pour obtenir la sortie ci-dessus pour le répertoire en cours.la source
paste
oucolumn
, vous pourriez obtenir un meilleur alignement:lsf () { find -maxdepth 1 -type f -exec bash -c 'column <(ls -l "$@") <(file -b "$@" | cut -d, -f1)' _ {} + ; }
le problème d'alignement n'est pas évident dans la réponse en raison des tailles et des dates similaires. (Cela sera également légèrement plus rapide, car les commandes seront invoquées moins de fois au lieu d'une fois par fichier.)column
approche vous convient-elle? Il imprime simplement la sortie dels -l
pour chaque fichier suivi defile
la sortie de 'pour chaque fichier pour moi, comme si la coquille ferait justels -l "$@"; file -b "$@" | cut -d, -f1
…/etc
.column
la sortie n'est pas vers le terminal, vous devez spécifier le nombre de colonnes ou il sortira les fichiers les uns après les autres;column -c "$COLUMNS" ...
devrait donc fonctionner dans les deux cas.Je pense que la meilleure façon d'afficher un type de fichier est d'utiliser cette commande:
Si vous souhaitez répertorier les types de tous les fichiers d'un répertoire, utilisez simplement:
Pour plus de détails sur les arguments, voir:
la source
mime type
seule, utilisez:file --mime-type filename
.file
assez bien, mais cette question est différente.file
réponse. Comme je l'ai répondu aux autres, cela ne suffit pas (il doit être intégré à ls), je le garde donc lors d'un vote. Je vous remercie.file --mime /dev/*
pour lister les mimes dans le répertoire / dev au lieu de currentPour plus de clarté, je vais souligner que vous pouvez voir le type de fichier dans un sens de base avec
ls
, en utilisant l'-F
indicateur (classify) qui ajoute un symbole au nom de fichier en fonction de son type:ls -l
Cependant, vous pouvez voir ces informations légèrement moins cryptiquement dans la première lettre de la sortie de . La réponse de wjandrea décrit cela plus en détail.Mais je ne pense pas que ce soit ce que vous entendez par type de fichier. La
ls
commande ne regarde pas à l'intérieur des fichiers normaux - uniquement sur les listes de répertoires (qui stockent les noms de fichiers) et les inodes (qui stockent les métadonnées, y compris le "type" dans le sens mentionné précédemment).Ainsi, la
ls
commande ne peut pas afficher le type de fichier dans le sens qu'il s'agit d'une image JPG ou d'un fichier binaire ou d'un fichier texte ou d'un document LibreOffice quelconque, car il ne contient pas ces informations.Pour cela, comme le souligne la réponse de singrium , vous avez besoin de la
file
commande, qui examine les 50 à 100 premiers Ko environ du contenu des fichiers pour déterminer leur type.la source
Une forme de type de fichier consiste à savoir si un fichier est un fichier normal, un répertoire, un périphérique, un lien symbolique, etc.
ls
peut le montrer en utilisant les options-l
ou-F
.L'option
-l
affichera le type de fichier sous la forme d'un seul caractère au début d'une liste, par exemple:Où
-
est un fichier normal,d
un répertoire etl
un lien symbolique.L'option
-F
affichera le type de fichier sous forme de suffixe, par exemple:Où aucun suffixe n'est un fichier normal,
/
un répertoire et@
un lien symbolique.Plus d'informations à ce sujet sont disponibles en
info coreutils 'ls invocation'
résumé ici:Pour
-l
:Pour
-F
:la source