mimetype¶
The mimetype
utility closely follows the file
command but uses MIME types instead of descriptions. It uses the shared MIME-info database and allows for options to add custom MIME types.
sudo apt install libfile-mimeinfo-perl
mimetype <name of the file>
mimetype 6285633006_R03C01_Red.idat
6285633006_R03C01_Red.idat: application/octet-stream
There are multiple options to customize the output. The --describe
or -d
option returns the file description instead of MIME type. The -D
or --debug
option prints the logic behind choosing the MIME type for the file.
mimetype -D <name of the file>
mimetype -D 6285633006_R03C01_Red.idat
> Data dirs are: /home/ubuntu/.local/share, /usr/local/share, /usr/share, /var/lib/snapd/desktop
> Checking inode type
> Checking globs for basename '6285633006_R03C01_Red.idat'
> Checking for extension '.idat'
> Checking globs for basename '6285633006_R03C01_Red.idat'
> Checking for extension '.idat'
> Value "^@" at offset 36 matches at /usr/share/mime/magic line 770
> Failed nested rules
> File exists, trying default method
> First 10 bytes of the file contain control chars
6285633006_R03C01_Red.idat: application/octet-stream
mimetype
allows for addition of custom MIME types.
From our example files list, we have an .idat
extension which is Illumina BeadArray data associated with microarray technology and solution for DNA and RNA analysis. .idat
is an example of a file extension not listed in the official MIME types. The IDAT file format varies from binary to encrypted XML depending on the array platform.
Warning
For demonstration purposes we chose to apply application/vnd.binary
as MIME type for .idat
files. This may or may not be the appropriate choice. The default application/octet-stream
which is defined as arbitrary binary data is desired behavior for files without an accepted designation. It is preferable to have unknown MIME type to prevent a file from being pushed somewhere inappropriate compared to a custom MIME type that may cause a file to be shunted into an application/pipeline where it doesn't belong.
We can add custom MIME types by creating an xml file illumina-idat.xml
using any text editor (nano, vim, emacs etc) for the file extensions.
<?xml version="1.0"?>
<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
<mime-type type="application/vnd.binary">
<comment>Illumina proprietary IDAT format</comment>
<glob pattern="*.idat"/>
</mime-type>
</mime-info>
Three lines in the above xml code require editing for every new custom MIME type created: The mime-type type=
sets the custom MIME type, the comment
explains the MIME type and the glob pattern
indicates the search pattern to be associated with the chosen MIME type.
globs
The glob
module finds all the pathnames matching a specified pattern according to the rules set by the Unix shell. For MIME type, the file extension acts as the pattern for the search across the filesystem.
Copy this file and update the mime-database.
sudo cp illumina-idat.xml /usr/share/mime/packages
sudo update-mime-database /usr/share/mime
sudo
On many sudo-based distributions, it is not possible to log in as a root user. Issuing a command with sudo
which operates on a per-command basis, helps gain administrative privileges. It is a solution to privilege-related errors. For example when copying files into directories without w
permission for users or installation of software.
Rerunning the code now results in the updated MIME type.
mimetype 6285633006_R03C01_Red.idat
6285633006_R03C01_Red.idat: application/vnd.binary
Revert to default
If you decide to use the default MIME type instead of the custom association, you can delete the .xml
file and update the mime-database.
sudo rm /usr/share/mime/packages/illumina-idat.xml
sudo update-mime-database /usr/share/mime