Currently I use exiftool with the -all= option and it deletes all the EXIF data from my photos:

exiftool -overwrite_original -all= /Users/andyl/photos/*.jpg

Now I want exiftool to delete all the EXIF information but NOT the photo's title, caption and keywords.

How I can achieve this?


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

man exiftools

Which should read something like this:


    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.

  • PS my caption gets deleted too (with the -caption parameter), is there any way to keep it? – Remus Rigo May 9 '17 at 11:11

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 \
  # 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 \

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


To delete all data using exif tool:

Rename exiftool(-k).exe to

exiftool (-overwrite_original -all= -k).exe

This solves many problems

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.