---
name: "exifgrep"
section: "1"
platform: "linux"
package: "exifprobe"
version: "2.0.1+git20201230.eee65ff-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/exifgrep"
---

# exifgrep(1)

select and reformat the output of exifprobe

## NAME

exifgrep - select and reformat the output of **exifprobe**

## SYNOPSIS

**exifgrep** \[*options*\] \[*egrep\_options*\] *egrep\_pattern* \[*NOT egrep-pattern\]* *filename(s)*

## DESCRIPTION

**Exifgrep** *is a shell script which applies* **[egrep(1)](/egrep/1.md)** *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 TIFF.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'
JPEG.APP1.Ifd0.Exif.FNumber='f7.0'
```

## OPTIONS

- \-r

  *file arguments may be directories, which will be searched via* **find** *for all image types recognized by* **exifprobe***.*

- \-n

  *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.*

- \-t

  *force* **exifprobe** *to print tag numbers for all itemes that have them, so* *that matches may be made on hex or decimal tag numbers.*

- \-c

  *turn on color output from* **exifprobe**

- \-h

  *print a usage message (help)*

- \-var

  *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).*

- \-export

  *report in "variable" format, but with a Bourne-compatible export* *command*

- \-num

  *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.*

## SEE ALSO

**[exifprobe(1)](/exifprobe/1.md)**

## AUTHOR

*Duane H. Hesser*\
 *dhh@virtual-cafe.com*
