command-line – How to get a list of applications associated with a file

command linefiles

File associations usually are made in the desktop environment, but how to get a list of applications associated with a file using command line?

Something like:

$ getassoc foo.pdf <CR>
$ acroread, okular

Does not need to be a command, can a cat + grep on any Gnome file

I'm using Gnome 2.28.2.

Best Answer

There really isn't a centralized resource that you can just "query" to get at this information. Rather it's maintained in a couple of text files that you can either manually parse if you know where to look or you can use the tool xdg-mime to construct the relationships.

Example

Say I have a PNG file on disk. I can find out its MIME type like this.

$ xdg-mime query filetype DSCN4747_DSCN4061_800x600.PNG 
image/png

I can then query xdg-mime asking it what the association is for this particular MIME type.

$ xdg-mime query default image/png
shotwell-viewer.desktop shutter.desktop

Looking through the mimeinfo.cache on my system I can find out a bit more about associations for a given MIME type using the following command:

$ grep 'image/png' /usr/share/applications/mimeinfo.cache 
image/png=shutter.desktop;gpicview.desktop;gimp.desktop;eog.desktop;geeqie.desktop;shotwell-viewer.desktop;

The desktop definitions in the mimeinfo.cache file are stored here:

$ locate shotwell-viewer.desktop
/usr/share/applications/shotwell-viewer.desktop

And it contains the name of the executables you're asking about:

$ grep 'Exec=' !$
grep 'Exec=' /usr/share/applications/shotwell-viewer.desktop
Exec=shotwell %f

Often times if I just want to launch something, I'll use the tool xdg-open <file|URL> to open a file rather than go and launch the app first, and then open the file.

References