Supprimer toutes les images sockets avec un appareil photo spécifique

Ce dont j'ai besoin:

Une command qui supprime tous les files .jpg du directory courant et des sous-directorys qui ont été pris avec une camera RaspberryPi.

(Idéalement, cela devrait fonctionner avec Git Bash pour Windows, mais cela le rendrait plus pratique et est donc optionnel).

Ce que j'ai essayé:

J'ai déjà utilisé find . -name "*.jpg" -size 24k -delete find . -name "*.jpg" -size 24k -delete pour supprimer les vignettes et j'ai découvert que l'utilitaire de file est capable d'afficher le fabricant de la camera ( manufacturer=RaspberryPi ).

Exemple:

 $ file f49100889.jpg f49100889.jpg: JPEG image data, Exif standard: [TIFF image data, big-endian, dirensortinges=10, height=0, manufacturer=RaspberryPi, model=RP_OV5647, xresolution=156, yresolution=164, resolutionunit=2, datetime=2015:06:09 08:15:03, width=0], baseline, precision 8, 1920x1080, frames 3 

Context:

Le système de files d'un lecteur NTFS a été corrompu et j'ai restauré les files en utilisant testdisk / photorec. Maintenant, j'ai les files mais j'ai perdu des métadonnées telles que la structure du directory et les noms de files. J'ai restauré les files les plus importants d'une sauvegarde déjà et je voudrais récupérer autant de données restantes que possible. J'ai besoin de supprimer des files d'ordures pour faciliter le travail avec le rest.

Est-il possible de combiner ces commands pour atteindre mon but? Si oui, comment? Y a-t-il une meilleure façon de procéder?

Merci d'avance!

Voici un moyen simple. Voici le contenu d'un script nommé script.sh dans ~/bin/ .

 #!/usr/bin/env bash if (file "$1" | grep "RaspberryPi"); then echo "rm $1" # <- safety first: just echo, no delete # rm "$1" # <- uncomment to delete, leave the quotes fi 

Donnez-lui la permission d'exécuter ( chmod 0750 ~/bin/script.sh ). Ensuite, trouvez les files et passez les résultats, un à la fois (en utilisant \; pas + ) au script.

 find ~ -iname *.jpg 2>/dev/null -exec ~/bin/script.sh {} \; 

Un autre outil est l' identify d'ImageMagick. Cet outil décrit les caractéristiques de l'image et lit datatables d'image, y compris EXIF. Il serait beaucoup plus lent que le file , mais il y a beaucoup plus d'informations dans l'image que l'information fournie par le file . Cela pourrait aider lorsque le file ne décrit pas datatables à find. Son utilisation pourrait être comme suit.

 identify -verbose "$file" | grep "RaspberryPi" 

Nous pouvons tester le code return de grep (après avoir utilisé le file ou l' identify dans l'instruction if ci-dessus) en affichant son code de return. De l' man grep :

Normalement, l'état de sortie est 0 si une ligne est sélectionnée, 1 si aucune ligne n'a été sélectionnée et 2 en cas d'erreur.

Combinez cette information avec la connaissance que le $? variable contient le code de return / valeur ou le code de sortie / valeur de la dernière command exécutée.

 file image.jpg | grep "RaspberryPi" echo $? 

Les lignes ci-dessus produiraient une valeur de zéro – correspondance trouvée – pour file résultats de file contenant la string "RaspberryPi".

 file image.jpg | grep "Rumpelstiltskin" echo $? 

Les lignes ci-dessus produiraient une valeur de un – pas de correspondance – en supposant que le file ne trouve pas une correspondance pour la string, "Rumpelstiltskin".