cClaude.rocks ☕ Le blog

L'informatique et les nouvelles technologies

Menu

Les systèmes Micro$oft Windows peuvent stocker des miniatures et métadonnées des fichiers images contenus dans les répertoires. Les vignettes et associées les métadonnées sont stockées dans des fichiers Thumbs.db (qui sont des fichiers structurés OLE non documentés). Une fois qu’une image a été supprimée du système de fichiers, la vignette et les métadonnées associées restent stockées dans le fichier Thumbs.db.

Cela peut être une solution pour récupérer des images de mauvaises qualité certes, mais qui dans certain peuvent être une consolation suffisante.

Un cas d’usage fréquent est la recherche d’une image dont on ignore la localisation, le nom, la date et si elle n’a pas été effacée… Dans ce cas la recherche de l’image peut être très longue et le fait de ne pas l’avoir trouvée n’indique pas grand-chose. Avec cette méthode, si elle a été mise en cache, on sera à même de déterminer si elle a été supprimée ou non. De plus l’exploration d’une grande quantité d’image est consommatrice en CPU et cela peut mettre pas mal de temps à s’afficher, ici on pourra ne s’attarder que sur des images de tailles réduites qui s’afficheront rapidement.

Pour extraire les vignettes des fichiers Thumbs.db :

Je vous propose la petite application vinetto pour cela :

Installation

Cette application fait partie des dépôts standard, elle est donc particulièrement simple à installer.

sudo apt install vinetto

Utilisation basique

vinetto [OPTIONS] [-s] [-U] [-o DIR] file

Options :
  --version   Affiche la version du programme et sort
  -h, --help  Affiche le message d’aide et sort
  -o DIR      Écrit les vignettes dans le répertoire DIR
  -H          Écrit un rapport au format HTML dans le répertoire DIR
  -U          Utilise l’encodage utf8
  -s          Création d’un lien symbolique vers le nom réel de l’image
              dans le dossier DIR/.thumbs

Voici quelques exemples d’utilisation de la commande vinetto (traduction du la documentation officielle):

  • Comment afficher les mĂ©tadonnĂ©es contenues dans un fichier Thumbs.db :
vinetto /path/to/Thumbs.db
  • Comment extraire les vignettes associĂ©es dans un rĂ©pertoire :
vinetto -o / tmp / vinetto_output /path/to/Thumbs.db
  • Comment extraire les vignettes associĂ©es dans un rĂ©pertoire et produire un rapport HTML pour prĂ©visualiser ces images via votre navigateur prĂ©fĂ©rĂ©.
vinetto -Ho / tmp / vinetto_output /path/to/Thumbs.db
  • Comment obtenir un rapport de mĂ©tadonnĂ©es sur tous les fichiers Thumbs.db non supprimĂ©s contenus dans une partition :
find / mnt / hda2 -iname thumbs.db -printf "\ n == \ n% p \ n \ n" -exec vinetto {} \; 2> /tmp/vinetto_err.log> /tmp/vinetto_hda2.txt

Pour ma part, j’ai rencontré quelques difficultés avec vinetto lorsque les chemins contenaient des espaces, je ne vous conseille donc pas d’utiliser des dérivés de la dernière syntaxe.

Utilisation massive

Si vous souhaitez extraire les vignettes et les métadonnées de l’ensemble des fichiers Thumbs.db existant dans une arborescence, voici un bout de code bash que vous pouvez adapter et qui vous permettra de le faire.

function vinetto_recursive {
  local dir="$1"
  local file=
  local -r extract_to='.Thumbs.content' # Nom du sous-dossier où seront stockées les vignettes et les métadonnées

  if [ -z "${dir}" ] ; then
    dir="$( pwd )"
  fi

  while read -r file ; do
    pushd "$( dirname "${file}" )" >/dev/null || return 1

    if [ ! -d "${extract_to}" ] ; then
      mkdir -v "${extract_to}" || return 1
    fi
    vinetto -o "${extract_to}" "$( basename "${file}" )"

    popd >/dev/null || return 1
  done < <( find "${dir}" -type f -iname thumbs.db )
}

Vous pouvez copier/coller cette fonction dans un terminal bash et ensuite l’utiliser comme suit :

vinetto_recursive 'chemin/vers/le/dossier/a/traiter/récursivement'

Si vous omettez le nom de dossier, le chemin courant sera utilisé.

Utilisation massive dans le cadre de la récupération de données

Dans le cas de la récupération de données, il n’est pas toujours possible de retrouver le nom d’origine du fichier. Cependant les outils de récupération arrivent généralement à retrouver le type de donnée contenu dans le fichier et par conséquent le nomme avec une extension raisonnable.

Attention, dans le cadre de la récupération de données, ne travaillez jamais sur le disque d’origine, mais sur une image de celui-ci.

Dans ce cas, je vous propose un script un peu plus agressif permettant de récupérer les miniatures et les métadonnées :

function vinetto_recursive2 {
  local dir="$1"
  local file=
  local extract_to=

  if [ -z "${dir}" ] ; then
    dir="$( pwd )"
  fi

  while read -r file ; do
    pushd "$( dirname "${file}" )" >/dev/null || return 1

    extract_to=".$( basename "${file}" ).content"

    if [ ! -d "${extract_to}" ] ; then
      mkdir -v "${extract_to}" || return 1
    fi
    vinetto -o "${extract_to}" "$( basename "${file}" )" || return 1

    popd >/dev/null || return 1
  done < <( find "${dir}" -type f -name '*.db' )
}

Pour supprimer les fichiers générer par la fonction ci-dessus, je vous propose d’utiliser la fonction suivante :

function vinetto_recursive2_cleanup {
  local dir="$1"
  local subdir=

  if [ -z "${dir}" ] ; then
    dir="$( pwd )"
  fi

  while read -r subdir ; do
    find "${subdir}" -type d -name '.thumbs' -print -exec rm -fr {} \;
  done < <( find "${dir}" -type d -name '.*.db.content' )
}

Rappel annexe

Pour effacer une structure de dossier vide sous Linux, vous pouvez utiliser la syntaxe suivante.

find . -type d -empty -print -delete

Références

ᦿ


ℹ 2006 - 2020 | 🕸 Retour à l'accueil du domaine | 🏡 Retour à l'accueil du blog