Header einer Datei auslesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
j A n
Beiträge: 86
Registriert: 19.12.2004 11:16:00
Kontaktdaten:

Header einer Datei auslesen

Beitrag von j A n » 28.07.2005 08:29:41

Hallo,

ich würde gerne den Header einer Datei auslesen um daraus schließen zu können um welchen Dateityp es sich handelt.
Kann ich dies mit bashscripting realisieren oder wird das ganze komplizierter mit perl,etc. ???
MfG

j A n

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 28.07.2005 08:49:40

Von weitere Dienste verschoben.

Kennst Du 'file' ? Das macht vielleicht schon was Du willst? Ansonsten müßtest Du genauer schreiben, was Du machen willst und was genau bei Dir der Header ist.

Bert
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

j A n
Beiträge: 86
Registriert: 19.12.2004 11:16:00
Kontaktdaten:

Beitrag von j A n » 28.07.2005 09:29:04

Ich möchte lediglich irgendwie herausfinden um was für eine Art Datei es sich handelt. Denn die Dateiendung kann man wirklich leicht ändern.
Aber es müssen doch in der Datei selbst irgendwo Informtationen stehen, ob es sich um eine mp3 oder avi Datei handelt z.b.

Was ist 'file' ? ist das eine Funktion ? Gibts die jetzt in Perl? oder ist das ein Linux-kommando ?
MfG

j A n

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 28.07.2005 09:39:47

Das ist ein Kommando. Gib einfach mal

Code: Alles auswählen

file -i /etc/apt/sources.list
ein, oder irgendeine andere Datei.

Von Perl hab ich keinen Schimmer.

Bert
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

j A n
Beiträge: 86
Registriert: 19.12.2004 11:16:00
Kontaktdaten:

Beitrag von j A n » 03.08.2005 08:27:14

Danke !

das war genau das was ich gesucht habe.

EDIT: Weisst dz zufällig auch wie ich diesem Programm sage das es alle Ordner und Unterordner einer Verzeichnisstruktur durchgehen soll ?

Habe das Prob erstmal mit: file -i `cat directorylist` umgangen, nur muss ich jetzt erstmal ein Script schreiben was mir diese Directorylist ausgibt, es sollen nämlich alle Homeverz. durchsucht werden. Ich hätte das am liebsten mit "find -i /home/*" gemacht.
MfG

j A n

Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

Beitrag von HELLinG3R » 03.08.2005 09:49:50

Code: Alles auswählen

file -i -f `find /home -type f`

j A n
Beiträge: 86
Registriert: 19.12.2004 11:16:00
Kontaktdaten:

Beitrag von j A n » 03.08.2005 10:15:15

Geht so leider nicht. Da ich die Meldung "bash: /usr/bin/file: Argument list too long" bekomme.
Ich habe es so gemacht das ich eine Directorylist generiere und diese dann in mehrere Dateien aufspalte, die dan in einer schleife eingelesen werden.
Aber Optimal ist das leider auch nicht,
MfG

j A n

Benutzeravatar
Bert
Beiträge: 3751
Registriert: 16.07.2002 14:06:52
Wohnort: Dresden
Kontaktdaten:

Beitrag von Bert » 03.08.2005 10:27:16

Bin selbst kein bash - Scripter. Aber das folgende geht bei mir:

Code: Alles auswählen

for i in `ls`; do file -i $i; done 
Man kann/sollte das natürlich in mehere Zeilen schreiben..

Hinweise/Verbesserungen von den Scriptern hier sind willkommen.

Bert
Programmer: A biological machine designed to convert caffeine into code.
xmpp:bert@debianforum.de

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 03.08.2005 10:48:38

Code: Alles auswählen

find /home -type f -exec file -i {} \;
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

j A n
Beiträge: 86
Registriert: 19.12.2004 11:16:00
Kontaktdaten:

Beitrag von j A n » 03.08.2005 11:45:13

Ich benutze jetzt:

for i in `find /home -type f`; do file -i $i; done

das scheint ganz gut zu klappen.
MfG

j A n

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 03.08.2005 12:13:55

naja.. viel spass bei Leerzeichen in einem Dateinamen.. könnte sein das er sich dabei verschluckt.. bei meinem aber vielleicht auch.. daher lieber

Code: Alles auswählen

find /home -type f -exec file -i "{}" \;
oder (nach dem IFS=" ist ein ENTER zu drücken)

Code: Alles auswählen

IFS="
"
for i in `find /home -type f`
do 
    file -i $i
done 
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

codi
Beiträge: 120
Registriert: 18.10.2004 20:20:22

Beitrag von codi » 03.08.2005 17:07:24

Code: Alles auswählen

find /home/ -type f -print0 | xargs -0 file    
wäre mein Vorschlag,... ;-), Damit gibt es auch keine Probleme mit Leerzeichen.

Gruß
Codi

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 03.08.2005 19:14:50

Ich hab auch noch einen :mrgreen:

Code: Alles auswählen

find /home -type f|while read x
do file -i $x
done
Ich würde aber auch die find-exec Variante vorziehen.

Antworten