exiftool: delete exif data but preserve some specific tags

You should always check the man pages if you are in trouble.

man exiftools

Which should read something like this:

--TAG

    Exclude specified tag from extracted information.  Same as the -x
    option.  May also be used following a -tagsFromFile option to
      exclude tags from being copied, or to exclude groups from being
    deleted when deleting all information (ie. "-all= --exif:all"
    deletes all but EXIF information).  But note that this will not
    exclude individual tags from a group delete.  Instead, individual
    tags may be recovered using the -tagsFromFile option (ie. "-all=
    -tagsfromfile @ -artist").  Wildcards are permitted as described
    above for -TAG.

Something like:

exiftool -overwrite_original -all= -tagsFromFile @ -title -caption -keywords /Users/andyl/photos/*.jpg

should work. Ensure that the tags really are named this way using exif /path/to/file.jpg.

What the command does? -all= deletes all the tags, -tagsFromFile @ takes the listed flags from the source file, in this case @ represents the current file, (you could of course substitute with a fixed file here like -tagsFromFile pic.jpg) and writes them to the destination.


If you only want to delete certain tags from the original file (i.e. no transfer from tags between files, but from within the same file), you do not need the -tagsFromFile switch, but a < to tell to transfer them along the file.

Note: As of now (version 10.79) -common<common cannot set composite tags and therefore using -common to transfer tags will break things, e.g. tranferring Flash to Model. Therefore, my code is explicit and includes every tag that -common would normally include. Seems to be a good idea, anyway.

exiftool -All:All= \
         -DateTimeOriginal<DateTimeOriginal \
         -Model<Model \
         -LensModel<LensModel \
         -FocalLength<FocalLength \
         -ISO<ISO \
         -ExposureTime<ExposureTime -ShutterSpeedValue<ShutterSpeedValue -BulbDuration<BulbDuration \
         -ApertureValue<ApertureValue -FNumber<FNumber \
         -WhiteBalance<WhiteBalance \
         -Flash<Flash \
         test.jpg
  # Or, if you want to use `-TagsFromFile`:
exiftool -All:All= \
         -TagsFromFile test.jpg \
         -DateTimeOriginal \
         -Model \
         -LensModel \
         -FocalLength \
         -ISO \
         -ExposureTime -ShutterSpeedValue -BulbDuration \
         -ApertureValue -FNumber \
         -WhiteBalance \
         -Flash \
         test.jpg

Please also note that my code contradicts the exiftool application documentation, which includes samples that I simply could not get to work with this task at hand (and version 10.79).