8768 sujets

Développement web côté serveur, CMS

Bonjour les Amis,
Je souhaites parcourir un répertoire et renommer tout les fichiers sans les déplacer,
mais il s'agit d'une utilisation en local (sur mon disque C
Auriez vous un outil tout prêt en PHP
J'avais écris en son temps

header( 'content-type: text/html; charset=utf-8' );
$data = glob("fichier_ori/*"); 
$z=count($data);
$LesFichiers = array();
$i=0; 
$y=0;
foreach( $data as $filename)
  {
    if (is_file($filename) )
     {
      $LesFichiers[$i] = $filename;
      $filex = $LesFichiers[$i];
      $filex2=str_replace("fichier_ori/","",$filex);
      $newfile = "fichier_desti/01_claire_".$filex2;
      $y++;
      if (!copy($filex, $newfile)) { echo "La copie ".$filex."  a échoué...<br />";}
      set_time_limit(20);
     }
 }
echo ("TERMINE pour ".$y." sur ".$z."<br />");
?>
<br /></p>
</body>
</html>


Mais ce n'est pas ce que je souhaite, voulant renommer sans déplacement, désolé, j'ai un peut pperdu pied , a la retraite
et ne programmant plus souvent.
Merci d'avance.
Salut,

Dans ton code le echo devrait être avant l'accolade pas juste après.
Et si tu veux juste renommer tu dois pouvoir remplacer copy par la fonction rename : https://www.php.net/manual/fr/function.rename.php

Et cela doit forcement être du php ?
Car perso pour faire des modification en local j'ai plutôt tendance à faire des commandes dans la console ou des scripts en bash (vu que je suis sous linux, pour toi sous windows ça doit être du powershell je suppose mais je sais pas en faire)
C'est du PHP qu'il me faut, car je n'ai plus mon trop vieux C++ qui aurait fait ça facile Smiley confus
En fait il va falloir que je prennes

rename ("/folder/file.ext", "/folder/newfile.ext");


Merci pour votre aide !
Jean-Pierre
Modérateur
Et l'eau,

Olivier C a écrit :
+1 pour les scripts bash (mais effectivement je suis sur Linux).


GNU/Linux, quelle bonne idée !

@Fox-infograp: en effet, avec php CLI, tu peux te coder un petit script. Pas la peine de passer par un serveur pour faire ce genre de choses. Par contre, si tu as des fichiers à renommer dans des sous-dossiers, tu vas devoir faire du récursif Smiley cligne . Pense à regarder les droits sur tes fichiers et dossiers Smiley cligne
Modifié par niuxe (23 Feb 2024 - 15:00)
Modérateur
en faisant simple :


<?php
    define('ROOT', dirname(__FILE__));
    $path = ROOT.'/dossier';
    $files = glob(sprintf("%s/*.txt", $path));
    $len_files = count($files);

    foreach($files as $k => $file){
        rename($file, sprintf('%s/%s.txt', $path, $k));
        printf("\n fichier : %s - %s sur %s", $file, $k, $len_files);
    }


en ligne de commande :

php index.php


ce qui donne :
upload/1708698839-11496-capturedancran2024-02-2315333.jpg
upload/1708698717-11496-tree.jpg
Modifié par niuxe (23 Feb 2024 - 15:34)
Meilleure solution
niuxe a écrit :
en faisant simple :
ETC...

Oui je comprends mais en local je suis dans un PHP qui fait d'autre choses
en plus je n'ai pas de serveur juste un EasyPHP qui date de Mathusalem en plus je traite le nom résultant en fonction du nom trouvé donc PHP presque obligatoire.
Mais toutes vos remarques m'ont fait réfléchir et corriger ma copie Smiley cligne mille mercis je posterais mon code final !
Encore mille merci à vous !
Modérateur
Rodolphe a écrit :
Si le but ultime n'est pas de le faire en code, il existe des interfaces graphiques très pratiques. Par exemple sous Windows les Powertoys fournis par Microsoft avec PowerRename, ou le freeware Siren https://www.scarabee-software.net/en/siren.html

Etc.


+1

Et même avec la ligne de commande, on arrive à un résultat similaire :
- rename
- f2 (multiplateforme)
Rodolphe a écrit :
Si le but ultime n'est pas de le faire en code, il existe des interfaces graphiques très pratiques. Par exemple sous Windows les Powertoys fournis par Microsoft avec PowerRename, ou le freeware Siren https://www.scarabee-software.net/en/siren.html

Etc.

Oui mais j'ai expliquer que chaque fichier son nom est analysé de façon complexe qu'aucun outil peut intégrer alors que c'est enfantin en PHP Smiley smile
Merci de ta réponse.