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.
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
- Manuel de vinetto
- Le source-forge de vinetto
- Documentation technique Windows thumbnail cache
- Documentation Windows thumbnail cache sur Wikipédia.
኿