file — Dateityp anhand des Inhalts bestimmen
Mit file den echten Dateityp am Inhalt erkennen statt an der Endung — über Magic-Number-Muster, inklusive MIME-Typ, Encoding und Skript-Einsatz.
file bestimmt den Typ einer Datei nicht anhand ihrer Endung, sondern anhand ihres tatsächlichen Inhalts: Es liest charakteristische Bytefolgen am Dateianfang – die sogenannten Magic Numbers – und vergleicht sie mit einer Musterdatenbank. Dadurch erkennst du auch falsch oder gar nicht benannte Dateien zuverlässig, etwa ein PNG hinter der Endung .dat oder ein ausführbares ELF-Binary ohne Endung. Für Skripte gibst du mit --mime-type einen sauberen MIME-Typ aus, mit -i zusätzlich das Encoding und mit -b ohne den Dateinamen. So ist file das Mittel der Wahl, bevor du eine unbekannte Datei öffnest oder einen Upload weiterverarbeitest.
Grundlagen
file <datei> — Bestimmt den Typ einer Datei.
file document.pdffile <datei1> <datei2> — Bestimmt mehrere Dateien auf einmal.
file *.binfile -b <datei> — Kurzmodus: lässt den Dateinamen in der Ausgabe weg.
file -b image.pngfile * — Bestimmt alle Dateien im aktuellen Verzeichnis.
file /usr/bin/*MIME-Typen
file -i <datei> — Zeigt MIME-Typ und Encoding.
file -i script.pyfile --mime-type <datei> — Zeigt nur den MIME-Typ.
file --mime-type photo.jpgfile --mime-encoding <datei> — Zeigt nur das MIME-Encoding (Zeichensatz).
file --mime-encoding data.csvfile -b --mime-type <datei> — Zeigt nur den MIME-Typ, ohne Dateinamen (nützlich in Skripten).
file -b --mime-type upload.datOptionen
file -z <datei> — Schaut in komprimierte Dateien hinein.
file -z archive.gzfile -L <symlink> — Folgt symbolischen Links.
file -L /usr/bin/pythonfile -s <gerät> — Liest block-/zeichenorientierte Spezialdateien (Geräte).
sudo file -s /dev/sda1file -f <liste> — Liest Dateinamen aus einer Listendatei (einer pro Zeile).
file -f filelist.txtfile -k <datei> — Macht weiter: zeigt alle passenden Typen, nicht nur den ersten.
file -k mystery.binBesondere Eingaben
file - — Liest von stdin und bestimmt den Inhalt.
curl -s https://example.com | file -echo '<daten>' | file - — Bestimmt durchgereichte Daten.
echo 'PK' | file -file -b - < <datei> — Bestimmt umgeleitete Eingabe (Kurzmodus).
file -b - < unknown.datHäufige Muster
find . -type f -exec file {} + | grep 'text' — Findet rekursiv alle Textdateien.
find /var/log -type f -exec file {} + | grep 'text'find . -type f -exec file {} + | grep 'ELF' — Findet alle ausführbaren Binärdateien.
find /usr/bin -type f -exec file {} + | grep 'ELF'file -i * | grep 'charset=utf-8' — Findet alle UTF-8-kodierten Dateien.
file -i *.txt | grep 'charset=utf-8'file * | grep -i image — Findet alle Bilddateien unabhängig von der Endung.
file uploads/* | grep -i imagefor f in *; do echo "$f: $(file -b "$f")"; done — Eigene formatierte Auflistung der Dateitypen.
for f in downloads/*; do echo "$f: $(file -b "$f")"; done Fazit
file ist das ehrliche Gegenstück zur Dateiendung: Es schaut in den Inhalt statt auf den Namen und sagt dir, was eine Datei wirklich ist. Im Alltag genügt oft der bloße Aufruf file datei; für Skripte und Pipelines lieferst du mit -b --mime-type einen sauberen, maschinenlesbaren MIME-Typ ohne Rauschen. In Kombination mit find -exec durchforstest du ganze Verzeichnisbäume nach Text, ELF-Binaries oder Bildern – unabhängig davon, wie die Dateien benannt sind. Bedenke dabei: file rät anhand von Heuristiken und kann sich täuschen, besonders bei sehr kleinen oder leeren Dateien. Für die reinen Metadaten greifst du zu stat, für den Verzeichnisüberblick zu ls und zum Aufspüren der Dateien zu find.
Weiterführende Links
- ubuntuusers-Wiki: file – deutschsprachige Einführung mit Beispielen und Hinweisen zu MIME-Typen
- Wikipedia: file (Unix) – Hintergrund zum Kommando und zum Magic-Number-Konzept