LinuxCommandLibrary

exiftool

Read, write, and edit file metadata

TLDR

Print the EXIF metadata for a given file

$ exiftool [path/to/file]
copy

Remove all EXIF metadata from the given files
$ exiftool -All= [path/to/file1 path/to/file2 ...]
copy

Remove GPS EXIF metadata from given image files
$ exiftool "-gps*=" [path/to/image1 path/to/image2 ...]
copy

Remove all EXIF metadata from the given image files, then re-add metadata for color and orientation
$ exiftool -All= -tagsfromfile @ -colorspacetags -orientation [path/to/image1 path/to/image2 ...]
copy

Move the date at which all photos in a directory were taken 1 hour forward
$ exiftool "-AllDates+=0:0:0 1:0:0" [path/to/directory]
copy

Move the date at which all JPEG photos in the current directory were taken 1 day and 2 hours backward
$ exiftool "-AllDates-=0:0:1 2:0:0" [[-ext|-extension]] jpg
copy

Only change the DateTimeOriginal field subtracting 1.5 hours, without keeping backups
$ exiftool -DateTimeOriginal-=1.5 -overwrite_original
copy

Recursively rename all JPEG photos in a directory based on the DateTimeOriginal field
$ exiftool '-filename<DateTimeOriginal' [[-d|-dateFormat]] %Y-%m-%d_%H-%M-%S%%lc.%%e [path/to/directory] [[-r|-recurse]] [[-ext|-extension]] jpg
copy

SYNOPSIS

exiftool [-OPT]... [-TAG[+-]=[VALUE]]... [-- FILE]...

PARAMETERS

-a
    Allow duplicate tags to be extracted

-b
    Output tags as binary data streams

-c FMT
    Column format for multi-valued lists

-d FMT
    Date/time formatting expression

-e
    Do not extract embedded files

-ext EXT
    Process only files with listed extensions

-f
    Force set tags even if they don't exist

-F
    Fix shifted date/time by timezone

-G[FAMILY]
    Group output by tag families

-h
    HTML formatted output dump

-H
    Show tag IDs in hexadecimal

-i DIR
    Ignore directories in recursion

-if CONDITION
    Process files matching condition

-list[w|f|g|d|x]
    List writable/groups/families/directories/all tags

-o OUTFILE
    Write output to specified file/dir

-overwrite_original
    Overwrite originals (no _original backups)

-P
    Print progress for files processed

-r
    Recursively scan subdirectories

-s[-][S]
    Short (very short) tag names only

-tagsFromFile SRCFILE
    Copy/delete tags from source file

-v[-][vvv]
    Increase verbosity of output

-z
    Output as ZIP archive

DESCRIPTION

ExifTool is a versatile open-source command-line utility for reading, writing, and editing metadata in thousands of tags across over 500 file formats, including images (JPEG, TIFF, PNG), videos (MP4, MOV, AVI), audio (MP3, FLAC), PDFs, and archives.

Developed by Phil Harvey, it excels in batch processing, allowing users to extract comprehensive metadata dumps, modify specific tags, shift dates/times across files, geolocate images, validate checksums, and strip private information for privacy. It supports advanced features like conditional processing with -if, user-defined composite tags, formatted output, and recursion through directories. By default, it creates non-destructive backups with a _original suffix during writes, ensuring data safety.

Popular among photographers, journalists, forensics experts, and archivists, ExifTool handles complex tasks like copying tags between files, renaming based on EXIF data, or generating reports. Its Perl-based core enables extensibility via config files and plugins.

CAVEATS

Over 300 options exist; full details in man exiftool. Defaults to backups on writes. Large files or deep recursion may be slow without -P. Not all tags writable in every format.

CONFIG FILES

Custom tags/behavior via ~/.ExifTool_config or -config option.
Supports Perl modules for extensions.

EXAMPLES

exiftool -r -ext jpg -all= DIR
exiftool '-DateTimeOriginal+=0:0:0 1:0:0' *.jpg
exiftool -GPS* image.jpg

HISTORY

Created by Phil Harvey in 2003 as ExifTool, initially for EXIF data. Evolved into multi-format metadata powerhouse with continuous updates; version 12.80+ as of 2024, used globally in forensics and photography.

SEE ALSO

exiv2(1), mediainfo(1), identify(1), jpeginfo(1)

Copied to clipboard