Suppression automatique des fichiers raw orphelins après un tris dans les fichiers jpeg lorqu'on prends des photos en raw +

Contenu du snippet

Bonjour,

Lorsqu'on prends des photos en raw + jpg, les 2 fichiers sont enregistrés sur la carte mémoire de l'appareil photo.
Bien souvent, on fait un tri dans les jpg rapidement pour supprimer les photos qui ne nous intéresse pas...
Le problème est qu'il faut ensuite supprimer à la main les raw associés

le but de ce code est de l’exécuter d'une manière régulière via la crontab d'un nas.
C'est une routine de suppression automatique des fichiers raw orphelin (c'est à dire ceux qui n'ont plus de jpg associé)

les fichiers raw doivent être dans un répertoire raw
par exemple:
- fichier jpg dans /photos/2012/anniversaire/
- fichier raw dans /photos/2012/anniversaire/raw/

si le fichier raw trouvé n'est pas dans un répertoire raw, le script log un message d'erreur et ne supprime pas le fichier

le script parcours l'ensemble du répertoire photo récursivement et quand il trouve un raw, il contrôle si il y a un jpg associé dans le répertoire parent.

le script utilise un classe de gestion de logs pour écrire et gérer les fichiers de log

Source / Exemple :


<?php
# //////////////////////////////////////////////////////////////////////////////////////////////////////////////
# /*nettoyage du répertoire photo -> suppression des rows dont le jpeg a été supprimé
# ce script est executé toute les nuits par la crontab
# *////////////////////////////////////////////////////////////////////////////////////////////////////////////
#les rows doivent etre dans un sous répertoire row 
#si le rows n'a pas d'équivalent jpg dans le répertoire parent alors on le supprime

//***************************************************************************************************
//définition des variables
//***************************************************************************************************

//emplacement du repertoire photo:
$rep= "/c/Nas/Photos/";
//emplacement du script (variable globale utilisée dans la fonction)
$racineScript="/c/Nas/docmalus/scripts/RawClean";
//initialisation du compteur de suppression:
$compteurSuppression=0;

//class utilisé pour geré les logs
include("log.class.php");

//***************************************************************************************************
//fonction de vérification des fichier jpg et row
//***************************************************************************************************
function isImg ($file)
	{
	if (eregi(".jpg$",$file)){return true;}
	} 
	
function isRaw ($file)
	{
	if (eregi(".ARW$",$file)){return true;}
	} 

//***************************************************************************************************
// fonction listing des repertoires par une fonction recursive
//***************************************************************************************************

function parcours_arbo1($rep,$ssrep) {
 global $racineScript;
 global $compteurSuppression;
 $log= new log(100000,10,"$racineScript/log/");
 if( $dir = opendir($rep) ) {
   while( FALSE !== ($fich = readdir($dir)) ) {
     if ($fich != "." && $fich != "..") {
       $chemin = "$rep$fich";
       if (is_dir($chemin)) {
	     parcours_arbo1($chemin.'/', ($ssrep==''?$fich:$ssrep.'/'.$fich));
       }
	   else
		 if(isRaw($fich))
			{
				//je verifie que le raw est bien dans un repertoire raw:
				if (eregi("raw/$",$rep)==false)
				{
					$log->add("system","ATTENTION : le fichier $ssrep/$fich n'est pas dans un repertoire raw!!! \n");
				}
				else
				{
					$NomSansExtension=substr($fich, 0, -4);
					$DossierParent=substr($rep, 0, -4);
					$fileJPG=$DossierParent.$NomSansExtension.'.JPG';
					if (file_exists($fileJPG)==false)
					{
						//je loggue l'évenement
						$log->add("system","le fichier $ssrep/$fich n'as pas son équivalent jpg et a été supprimé \n");
						//suppression du fichier RAW concerné
						//unlink ($rep.$fich);
						$compteurSuppr++;
						if($compteurSuppr>0)
						{
							$compteurSuppression++;
						}
					}
				}
			}
	   }
 	 }
  }
}

//***************************************************************************************************
//main program
//***************************************************************************************************
//initialisation des logs:
$log= new log(100000,10,"$racineScript/log/");
$log->add("system","*************************************\n");
$log->add("system","Demarrage de la session de nettoyage:\n");
$log->add("system","*************************************\n");

//lancement de la fonction de lecture du répertoire photo de manière récursive
parcours_arbo1($rep,'',$racineScript);

//insertion de la log finale avec le compteur de suppression
$log->add("system","$compteurSuppression fichiers ont été supprimés \n");

?>

Conclusion :


ex de logs générés:

11/05/2012 | 10:03:50 | system | *************************************

11/05/2012 | 10:03:50 | system | Demarrage de la session de nettoyage:

11/05/2012 | 10:03:50 | system | *************************************

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03289.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03290.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03303.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03293.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03300.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03283.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03285.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03292.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03291.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03288.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03301.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03284.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03287.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/raw/DSC03304.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/portrait/RAW/DSC03436.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/portrait/RAW/DSC03433.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/photo d'artistes Malus/portrait/RAW/DSC03442.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | ATTENTION : le fichier 2012/test/DSC03283.ARW n'est pas dans un repertoire raw!!!

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03407.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03369.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03380.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03368.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03415.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03370.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03372.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03378.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03394.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03377.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03391.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03371.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03366.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03375.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03376.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03373.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03411.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03367.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03379.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:50 | system | le fichier 2012/Paris/RAW/DSC03374.ARW n'as pas son équivalent jpg et a été supprimé

11/05/2012 | 10:03:51 | system | 37 fichiers ont été supprimés

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.