exifgrep(1) select and reformat the output of exifprobe


exifgrep [options] [egrep_options] egrep_pattern [NOT egrep-pattern] filename(s)


Exifgrep is a shell script which applies egrep(1) to the output of exifprobe -L, permitting easy selection and minor reformatting of output items.

exifprobe is small, fast, and utterly sycophantic in its desire to report everything it finds in an image. exifgrep applies the regular expression matching capabilities of egrep to the output barrage to extract only wanted information.

exifgrep also performs a mild form of selection on the output fields of exifprobe -L. Many items reported by exifprobe are represented in the image file by a number which compactly represents a defined value.

E.g. exifprobe -L may report

TIFF.Ifd1.ResolutionUnit = 2 = 'pixels per inch'

where the value ``2'' must be interpreted to mean that resolution values (TIFF.IFd1.Xresolution and IFF.IFd1.YResolution) are recorded in pixels per inch, rather than, say, pixels per centimeter. exifprobe reports both fields; exifprobe may also report interpreted values for items which are recorded in unfamiliar units, such as

JPEG.APP1.Ifd0.Exif.FNumber           = 5.6 APEX = 'f7.0'

In all such cases, exifgrep reports (by default) only the "human readable" field:

TIFF.Ifd1.ResolutionUnit = 'pixels per inch'
JPEG.APP1.Ifd0.Exif.FNumber = 'f7.0'

unless the "-num" option is given to select the numerical value.

In addition, a `variable' format may be selected ("-var") which eliminates whitespace, providing a format which typical shells may use directly to set variables for further processing. E.g.

TIFF.Ifd1.ResolutionUnit='pixels per inch'


file arguments may be directories, which will be searched via find for all image types recognized by exifprobe.
force exifprobe to print a filename for each line of its output, which exifgrep will turn into a comment at the end of each matching line.
force exifprobe to print tag numbers for all itemes that have them, so that matches may be made on hex or decimal tag numbers.
turn on color output from exifprobe
print a usage message (help)
report in "variable" format, which may be directly `sourced' by any Bourne-compatible shell (except that most shells will insist that the dots must be replaced, e.g. by underscores).
report in "variable" format, but with a Bourne-compatible export command
report numerical values rather than interpreted strings, for fields which have both.

NOTE: the -var and -export options are obsolescent; they are retained for compatibility with earlier versions of exifprobe. A post-processor such as reformat.sh may be more effective for the current version if shell-compatible output is desired.

Any option not recognized by the script will be passed on to egrep.

The first non-option argument will be used as the pattern passed to egrep. This may be followed by the keyword NOT and an expression representing matches to be rejected. This pattern will be passed to egrep -v. Only one argument of each type may be given, and the "accept" expression (if given) must appear before the "reject" expression.

All remaining arguments are interpreted as image filenames.


Duane H. Hesser
[email protected]