web-dev-qa-db-fra.com

Comment puis-je afficher tous les types de fichiers contenus dans un répertoire?

Y at-il une commande qui me dit dans le répertoire spécifique quels types de fichiers existent?

Je peux trouver le type de fichier en utilisant une commande telle que od -c myfile | less.

Mais je ne sais pas comment le faire pour tous les fichiers d'un répertoire.

12

Bien que od -c affichera effectivement le contenu d'un fichier, ce n'est pas un bon moyen d'obtenir son type de fichier. Bien que certains fichiers contiennent un en-tête avec le type de fichier, ils ne le seront pas tous. Une meilleure façon est la commande file:

$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text

Donc, pour obtenir une liste de tous les types de fichiers dans un répertoire, vous pouvez faire:

for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u

Exemple de sortie:

 PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
 ASCII text
 directory
 GIF image data, version 89a, 22 x 22
 ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped

Explication

  • for file in dir/*; do ... done;: parcourir tout le contenu de dir (dir est juste un exemple, vous devriez changer ceci en nom du répertoire réel dans lequel vous voulez chercher), en enregistrant chaque élément sous le nom $file
  • file "$file": exécutez file sur chacun des éléments trouvés.
  • cut -d: -f 2: affiche uniquement le deuxième champ (champs définis par :)
  • sed 's/^ //; s/ +/ /g': supprime les espaces du début de la ligne et convertit les espaces consécutifs en un seul espace.
  • sort -u: supprimer les types de fichiers en double
19
terdon

Je ferais probablement quelque chose comme ça -

find . -type f -exec file {}  \;

Cela recherchera des fichiers dans le chemin actuel (par exemple, aucun répertoire), puis exécutera la commande file sur chaque fichier.

3
Elliott Frisch

Essaye ça:

ls | xargs file -b | sort | uniq

Comment ça marche:

ls: liste le contenu du répertoire

file -b: détermine le type de fichier; ne pas ajouter de noms de fichiers aux lignes de sortie

sort: lignes de tri

niq: omettre les lignes répétées

1
Wolfy