Het gebruik van de linux 'file'-opdracht om het type te bepalen (bijv. Afbeelding, audio of video)

Het woord bestand verwijst hier naar de shell file , en geen echte bestanden. Ik wil bepalen of een bestand een, bijvoorbeeld, videobestand is ( .mpg , .mkv , .avi ). bestand is best goed voor het retourneren van afbeelding voor afbeeldingsbestanden, video voor videobestanden en audio voor audiobestanden ( en application/x-empty om een ​​of andere reden voor tekst). Mijn vraag is hoe betrouwbaar dit is voor het identificeren van typen. Als ik een simpele deed

file -ib deliverance.avi | grep video

zou dat werken voor alle hoofd videobestanden beschreven hier ?

10

3 antwoord

De resultaten van file zijn minder dan perfect, en het heeft meer problemen met sommige soorten bestanden dan andere. Bestand zoekt in principe alleen naar bepaalde stukjes binaire gegevens in voorspelbare patronen om bestandstypen te vinden.

Helaas vallen met name enkele van de bestandstypes die vaak voor video worden gebruikt in deze categorie "problematisch". De nieuwere containerformaten zoals .mp4 en .mkv hebben meestal verschillende MIME-typen die juist moeten afhangen van welk type gegevens wordt bewaard. Een .mp4 kan bijvoorbeeld correct worden geïdentificeerd als video/mp4 , audio/mp4 of toepassing/mp4 afhankelijk van de inhoud.

In de praktijk maakt bestand vaak gissingen die eenvoudigweg in overeenstemming zijn met algemeen gebruik, en het kan perfect voor u werken. Hoewel ik bijvoorbeeld enkele theoretische problemen heb genoemd bij het correct identificeren van Matroska-bestanden, gaat file eigenlijk ervan uit dat elk Matroska-bestand een video is. Aan de andere kant is het gebruik van de Ogg-container gelijkmatiger verdeeld tussen audio en video, en ik geloof dat de huidige versie van file alleen het verschil splitst en identificeert Ogg-bestanden als applicatie/ogg , die niet in een van uw categorieën valt.

Het enige dat ik met zekerheid kan zeggen, is dat u de meest recente versie van -bestand wilt die u kunt vinden. De "magische" bestanden die de patronen bevatten die overeenkomen en de MIME-typen die het resultaat zijn van een overeenkomst, worden vrij vaak bijgewerkt met nieuwere bestandstypen zoals WebM, of alleen om de nauwkeurigheid voor oudere typen te verbeteren.

9
toegevoegd
Kun je wat advies/links geven om dit nauwkeuriger te maken? Ik begin met het controleren van de bestandsextensie met behulp van PHP functions . Zeker sites als youtube gaan over hetzelfde probleem. Bedankt
toegevoegd de auteur puk, de bron
Ik deed een voorlopige test en het dossier was behoorlijk accuraat. Natuurlijk zal het niet gemakkelijk zijn om een ​​betrouwbaar voorbeeld te krijgen van bijvoorbeeld 25.000 verschillende videobestanden.
toegevoegd de auteur puk, de bron
Weet jij hoe de grote sites met dit probleem omgaan? Misschien moet mplayer proberen om het te spelen.
toegevoegd de auteur puk, de bron
Dit is incorrect. De bestandsopdracht kijkt niet naar "bepaalde stukken binaire gegevens in voorspelbare patronen om bestandstypes te vinden." Het kijkt naar de eerste paar karakters van het bestand, die in unix-land een bestandstype bepalen. Het wordt ook het magische nummer van de bestanden genoemd. De magische getaltabel wordt vervolgens in een tabel opgezocht. frankc's antwoord hieronder is het juiste antwoord
toegevoegd de auteur Doo Dah, de bron
Ik wil niet negatief klinken. bestand is waarschijnlijk ongeveer net zo goed als u gaat krijgen. U kunt ook controleren op de extensie als u zeker wilt weten dat sommige extensies op een bepaalde manier worden gedetecteerd (of om een ​​probleem dat u in de praktijk hebt op te lossen).
toegevoegd de auteur John Flatness, de bron
Het huidige formaat van het magische bestand dat u in principe overal zult vinden, maakt patronen aanzienlijk gecompliceerder dan alleen "de eerste paar tekens van het bestand", inclusief patronen bij statische of variabele verschuivingen, en kan multi-level tests uitdrukken die nauwkeuriger een bestandstype. (Ook zou ik het typische "magische getal" als een bepaald stukje binaire gegevens toch in een voorspelbaar patroon beschrijven.)
toegevoegd de auteur John Flatness, de bron

bestand werkt door te verwijzen naar de header van het bestand tegen een "magic number" -bestand. Ik vermoed de beste manier om te zien hoe robuust het bestand is om je lokale magische nummerbestand te controleren (mogelijk/usr/share/magic maar zie manbestand voor details) voor de bestandstypen uit je lijst waarnaar wordt verwezen.

1
toegevoegd

Het lijkt erop dat het voor de meeste video-/audio-/afbeeldingsbestanden zou moeten werken. Maar als dat niet het geval is, is er eigenlijk een bestand met de relaties tussen een extensie en het type:

De informatie die deze bestanden identificeert, wordt gelezen uit het gecompileerde magische bestand /usr/share/magic.mgc, of/usr/share/magic als het compileerbestand niet bestaat.

see: http://linux.about.com/library/cmd/blcmdl1_file.htm

Ik hoop dat dit helpt!

1
toegevoegd