exiftool: delete exif data but preserve some specific tags
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?
Solution 1:
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.
Solution 2:
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).