J’ai des dizaines de milliers de photos JPG dans de multiples sous-dossiers sous un dossier unique et un bon nombre de ces fichiers image n’ont pas de mots-clés dans leurs métadonnées.
Je veux trouver un moyen de parcourir tous les dossiers et de copier ou déplacer tous les fichiers JPG qui n’ont pas de mots-clés vers une structure de dossiers dupliquée.
Comment puis-je faire cela ?
J’ai Windows 10 et Exiftool et je suis familier avec les scripts Batch.
Concernant l’exemple ci-dessous, notez que la présence de mots-clés N’EST PAS indiquée par le nom réel de l’image. Ces noms dans l’exemple ne servent qu’à illustrer quelles images ont et n’ont pas de mots-clés dans leurs métadonnées.
Cela peut être fait avec une seule commande exiftool. Exiftool a une puissante capacité de traitement par lots intégrée et il n’est presque jamais nécessaire de créer un script.
La seule mise en garde est que vous devez d’abord vous placer avec CD dans le répertoire qui est le sommet de l’arborescence que vous voulez préserver. Dans votre exemple, vous pourriez d’abord faire CD dans F:\testFindNoKeywords
Vous pourriez ensuite exécuter cette commande dans Windows CMD (pas PowerShell). Si vous l’exécutez sur Mac/Linux, vous pourriez changer les guillemets doubles en guillemets simples :
exiftool -r -if "not $keywords and not $subject" "-Directory=F:\testFindNoKeywordsResult\%d" .
-if : L’option conditionnelle. Cela prendra le paramètre suivant, qui doit être une expression de code Perl, et comparera les données de chaque fichier à cette expression.
-Directory : Cela indique à exiftool que ce sera une opération de déplacement vers le répertoire indiqué. La variable %d est remplie avec le chemin du répertoire vers le fichier en cours de traitement. La valeur sera basée sur le répertoire donné en ligne de commande. Si la ligne de commande reçoit un chemin absolu, alors cela contiendra le chemin absolu vers le fichier. C’est pourquoi vous devez faire CD dans le répertoire au sommet de l’arborescence que vous voulez copier. Le résultat sera le chemin relatif vers le répertoire, qui peut être ajouté au nouvel emplacement de répertoire.
. : Le point représente le répertoire courant.
Voici un exemple de sortie. Les fichiers 1.jpg et 2.jpg ont chacun une entrée dans Keywords ou Subject. Le fichier 3.jpg n’a aucun mot-clé. Le résultat est que le fichier 3.jpg est déplacé vers le nouveau répertoire tout en préservant l’arborescence de répertoires.
Y:\!temp\x\y>tree .\a /f
Folder PATH listing for volume DrivePool
Volume serial number is 3881-4F27
Y:\!TEMP\X\Y\A
│ 1.jpg
│
└───b
│ 2.jpg
│
└───c
3.jpg
Y:\!temp\x\y>exiftool -G1 -a -s -Keywords -Subject -r .\a
======== ./a/1.jpg
[XMP-dc] Subject : 1
======== ./a/b/2.jpg
[IPTC] Keywords : 2
======== ./a/b/c/3.jpg
3 directories scanned
3 image files read
Y:\!temp\x\y>exiftool -r -if "not $keywords and not $subject" "-Directory=Y:\!temp\x\y\NoKeywordsFound\%d" .\a
3 directories scanned
1 directories created
2 files failed condition
1 image files updated
0 image files read
Y:\!temp\x\y>tree /f Y:\!temp\x\y\NoKeywordsFound
Folder PATH listing for volume DrivePool
Volume serial number is 3881-4F27
Y:\!TEMP\X\Y\NOKEYWORDSFOUND
└───a
└───b
└───c
3.jpg
Il est important de noter que vous ne devez pas utiliser exiftool dans une boucle, en l’appelant une fois par fichier. Le plus gros impact sur les performances d’Exiftool est le temps de démarrage et l’appeler en boucle sur plus de 10 000 fichiers augmentera considérablement le temps de traitement. Voir Exiftool Common Mistake #3, “Over-scripting”