Exif: Difference between revisions

From miki
Jump to navigation Jump to search
(Created page with ''''[http://en.wikipedia.org/wiki/Exif EXIF]''' (Exchangeable image file format) is a standard format for metadata in images, sounds... == Interesting links == * [http://icwww.ep…')
 
Line 16: Line 16:
extract -V file.jpg # Short verbose info on file.jpg
extract -V file.jpg # Short verbose info on file.jpg
exiv2 -p s file.jpg # List EXIF data
exiv2 -p s file.jpg # List EXIF data
exiv2 mv -t *.jpg # Rename & change JPEG file timestamp

exiv2 mv -T *.jpg # *Only* change JPEG file timestamp
</source>
</source>



Revision as of 23:51, 17 November 2012

EXIF (Exchangeable image file format) is a standard format for metadata in images, sounds...

Interesting links

Tools

  • extract
    Behave like file command, but for metadata (support many formats)
  • Exiv2
    Very powerful, support rename and update of file timestamps
  • jhead

Commands

extract -V file.jpg        # Short verbose info on file.jpg
exiv2 -p s file.jpg        # List EXIF data
exiv2 mv -t *.jpg          # Rename & change JPEG file timestamp
exiv2 mv -T *.jpg          # *Only* change JPEG file timestamp

Scripts

From [1]

First recover the files, and sort them a bit:

photorec /d rescuedir disk_image
find rescuedir -type f | cut -d. -f2 | sort | uniq -c | sort -n    # View file types and quantities

A script to rename jpg files according to their timestamps, and detect duplicates:

#! /bin/bash

trash=trash$$
unknown=unknown$$
mkdir $trash
mkdir $unknown
for file in f*.jpg; do
  newname=`exiv2 -p s $file | grep -a timestamp | awk '{ print $4 "-" $5 }' | sed 's/:/-/g'`
  if [ $? -eq 0 -a "x$newname" != "x" ]; then
    if [ ! -f ${newname}.jpg ]; then
      mv $file ${newname}.jpg
    else
      cmp $file ${newname}.jpg
      if [ $? -eq 0 ]; then
        echo "WARN: $file is a duplicate of ${newname}.jpg: moved to $trash"
        mv $file $trash
      else
        echo "ERR: ${newname}.jpg already exists but differs. $file unchanged"
      fi
    fi
  else
      echo "ERR: unable to get info from ${file}: moved to $unknown"
      mv $file $unknown
  fi
done

Sort files in different directories:

for file in [12][0-9][0-9][0-9]-*.jpg; do
 dirname=`echo $file | cut -d- -f1` # ou ${file:0:4} en bash
 if [ ! -d $dirname ]; then
   mkdir $dirname
 fi
 mv $file $dirname
done

Some custom scripts

Sort files by size:

#! /bin/bash
#
# Example: sortsize.sh rescue jpg
#
#          Look for 'jpg' file in directory 'rescue', and sort them (create a
#          new directory 'jpg' in current directory.

if [ -z "$1" ]; then
    echo Usage: $0 directory extension
    exit 1
fi

ext=$2
MICRO=${ext}/_1_micro
TINY=${ext}/_2_tiny
SMALL=${ext}/_3_small
MEDIUM=${ext}/_4_medium
BIG=${ext}/_5_big

mkdir -p $MICRO $TINY $SMALL $MEDIUM $BIG
while read SIZE FILE; do
    if (( $SIZE < 1000 )); then
        mv $FILE $MICRO/
    elif (( $SIZE < 10000 )); then
        mv $FILE $TINY/
    elif (( $SIZE < 100000 )); then
        mv $FILE $SMALL/
    elif (( $SIZE < 1000000 )); then
        mv $FILE $MEDIUM/
    else
        mv $FILE $BIG/
    fi
done < <(find "$1" -type f -iname "*.$ext" -print0 |xargs -0 stat -c "%s %n")