Renommer tous les fichiers d'un dossier

Contenu du snippet

class RenameFilesDir
{
    /** @var string $dir : Nom absolue du dossier AVEC un lien symbolique './dossier' ou '../dossier' */
    private $dir;
    /** @var string $prefix : Prefix des fichiers renommer */
    private $prefix;
    
    /** @param string $ini_extensions : sélection extension particulière, par défaut toutes les extensions */
    private $ini_extensions;
    
    /** @param int $ini_counter : simple compteur pour la partie suffixe */
    private $ini_counter;
    
    /**
     * Méthode magique constructeur
     */
    public function __construct($dirname, $prefix='newname', $ini_extensions='', $ini_counter=0)
    {
        $this->dir .= (preg_match('/\/$/', $dirname)) ? $dirname : $dirname.'/';
        $this->prefix = strval($prefix);
        $this->ini_extensions = strval($ini_extensions);
        $this->ini_counter = intval($ini_counter);
        if(!preg_match('/^\.{1,2}/', $this->dir))
            throw new Exception('Indiquer le dossier avec un lien symbolique : \'./dossier\' ou \'../dossier\'');
        if(!file_exists($this->dir))
            throw new Exception('Le dossier n\'a pas été trouvé');
        $this->rename();    
    }        
    
    /**
     * Renommage des fichiers
     */
    private function rename()
    {
        $it = new FilesystemIterator($this->dir);    
        foreach ($it as $fileinfo) {
            $current_file = $it->getFilename(); 
            if($it->isFile() && !$this->ini_extensions) 
                preg_match('/(.*)\.(.*)$/i', $current_file, $match);
            elseif($it->isFile())
                preg_match('/(.*)\.('.trim( $this->ini_extensions, '.' ).')$/i', $current_file, $match);
    
            if(isset($match) && sizeof($match)>1) {
                $old_file = $this->dir . $match[0];    
                $new_file = $this->dir. $this->prefix. (($this->ini_counter < 10) ? '0'.$this->ini_counter : $this->ini_counter). '.' .$match[2];    
                rename($old_file, $new_file);
                $this->ini_counter++;    
            }    
        }
    }
}

Compatibilité : PHP 5

Disponible dans d'autres langages :

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.