Möglichkeit, Klartext-Dateitypen in Bash zu identifizieren?

773
big-o

Gibt es eine Alternative zu dem fileBefehl, mit der Klartext-Dateitypen identifiziert werden können, die keine magische Zahl haben? Beispielsweise kann ich eine Datei angeben, die JSON enthält, und ich bekomme eine Antwort wie "JSON" anstelle von "ASCII-Text".

Wenn dies nicht der Fall ist, gibt es alternative magische Dateien, die dazu führen können, dass sich der fileBefehl so verhält?

0
Nur-Text-Dateien haben keine unterscheidbaren Bezeichner oder Strukturen, da sie PLAIN TEXT sind. :) Ƭᴇcʜιᴇ007 vor 9 Jahren 0
@ techie007, Linux hat Binärdateien und Nur-Text-Dateien. Für reine Textdateien gibt es verschiedene Formate, die sie aufnehmen können (xml, html) und Muster, die für Skripte (perl, python, bash usw.) erkennbar sind. IDEs verwenden diese Muster, um die Zeilen und Schlüsselwörter in den Dateien farblich hervorzuheben. Der Dateibefehl kann einige Unterschiede feststellen (er gibt "POSIX-Shell-Skript ausführbare Datei" für ein Shell-Skript zurück, das technisch immer noch eine reine Textdatei ist). MaQleod vor 9 Jahren 1
@maQleod Es ist nicht möglich, einen Dateityp zu identifizieren, der keine erkennbare Struktur (auch "Format" genannt) hat, unabhängig vom Betriebssystem. Da Klartextdateien an sich keine definierte Struktur oder Format haben, können sie nicht als solches erkannt werden. Alles, was Sie tun können, ist bestenfalls alle anderen bekannten Strukturen auszuschließen und dann davon auszugehen, dass die Datei aus reinem Text besteht. Ƭᴇcʜιᴇ007 vor 9 Jahren 3
Ich kenne keinen generell überlegenen Ersatz für `file` oder eine bessere Quelle für magische Dateien. Da es jedoch so viele Dateitypen gibt, für die "file" entweder unzuverlässig oder unzureichend detailliert ist, ende ich oft dazu, benutzerdefinierte Python-Skripte zusammenzubauen. John1024 vor 9 Jahren 0
Dies wirft die Frage auf, warum * Sie dies gerne tun würden. Was genau stimmt mit `file`? Sami Laine vor 9 Jahren 0

1 Antwort auf die Frage

0
Adrian Frühwirth

Wie von @ techie007 erläutert, gibt es keinen vernünftigen und effizienten Weg, um das "Format" einer Textdatei zu ermitteln. Wenn Sie jedoch speziell testen möchten, ob eine Datei gültige JSON-Dateien enthält, können Sie wahrscheinlich jq für diese Aufgabe verwenden, da sie wahrscheinlich zurückgegeben wird mit einem Fehlercode! = 0bei ungültiger JSON-Eingabe.