Précédent   Forum des professionnels en informatique > Systèmes > Linux
Linux Forum d'entraide sur le système Linux. Avant de poster -> Tutoriels Linux, F.A.Q Linux
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 03/02/2010, 16h00   #1
Invité de passage
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 4
Points : 4
Par défaut Renommer en masse des fichiers avec des expression régulière dans leurs nom

Bonjour,

Je suis a la recherche d'un script/programme qui soit sous Linux, et qui permettrais de renommer en masse des fichiers/Dossier dont le nom contient des expression régulière (%$/\! etc ...) avec prise en compte des sous dossier si possible

Exemple: Devis-10/12/09.odt en Devis-10-12-09.odt

L'explication c'est que les utilisateurs sont très imaginatifs au niveau des noms de fichiers et cela pose problème lors de sauvegarde sur disque dure externe (en Fat 32 et NTFS), ou sur serveur.

Ça fait quelque temps que je cherche mais sans trop de résultat ...

Merci de votre aide

Totorux

Dernière modification par totorux ; 04/02/2010 à 16h37. Motif: Programme trouvé
totorux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2010, 17h12   #2
Membre habitué
 
Inscription : avril 2009
Messages : 153
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : avril 2009
Messages : 153
Points : 135
Points : 135
Bonjour

Il faudrait savoir quels motifs tu veux remplacer/corriger exactement, mais c'est du détail.

Je ne sais pas à quel point tu t'y connais en shell, donc le "squelette" que je te propose est à analyser/compléter.
N'hésite pas à poser des questions.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
#!/bin/sh
 
RACINE=point/de/depart
 
for file in $(find $RACINE)
do
    BASE=$(basename $file)
    DIR=$(dirname $file)
    BASE=$(tr "/" "-" <<<$BASE)
    mv $file $DIR/$BASE
done
Là on ne fait que renommer les "fichiers". Si tu veux aussi renommer les répertoires, tu n'est pas obligé d'utiliser BASE et DIR, mais "corriger" directement $file.

ATTENTION CEPENDANT, ce script est à tester, je n'ai pas la possibilité de le faire pour l'heure, j'ai peut-être oublié des choses.
BSans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 10h38   #3
Invité de passage
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 4
Points : 4
Bonjour,

Merci de ta réponse on va dire qu'au niveau bash je "débute" j'ai fait quelques scripts mais relativement simple et je doute qu'ils soient bien construit (ex: https://totorux.info/weblog/?p=263).

Lors de mes recherche je suis tombé là dessus:

http://www.nas-forum.com/forum/index...n-des-accents/

Qui semble intéressant, j'étais partit sur l'idée de faire évoluer ce petit script.

Ta solution m'intéresse également (je l'ai compris :p), je pensais essayer de faire ça en 2 passes, l'une se chargeant des nom de dossier et une seconde des noms de fichiers.

Au niveau des caractères que je vise a supprimé en voici une liste (en plus des caractères accentué) : :%?!$&()*><"[]/\
L'idée est de pouvoir copier sans souci les fichiers.

Encore Merci

Totorux
totorux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 11h36   #4
Membre habitué
 
Inscription : avril 2009
Messages : 153
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : avril 2009
Messages : 153
Points : 135
Points : 135
Il me semble également qu'un utilitaire existe pour "convertir" les noms de fichiers. Malheureusement, je n'ai plus le nom en tête.

Sinon, avec tr tu dois pouvoir t'en sortir.

Enfin, si tu es curieux, et que tu n'as pas peur de voir de "nouvelles choses", tu peux regarder au niveau de Perl. Je sais qu'il existe des outils/modules pour renommer des fichiers en masse. Mais je n'ai plus les noms en tête non plus.
BSans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 11h59   #5
Invité de passage
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 4
Points : 4
Bonjour BSans

J'ai essayé de regarder du coté d'un programme qui s'appelle detox, mais j'ai pas été très convaincus du résultat.

Autrement non je ne suis pas réfractaire a apprendre de nouveau langage. J'hésite entre le perl et le python (attention au Troll )

@+

Bonne journée

Totorux
totorux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 13h58   #6
Membre habitué
 
Inscription : avril 2009
Messages : 153
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : avril 2009
Messages : 153
Points : 135
Points : 135
Sans vouloir entrer dans un débat qui pourrait durer des posts, je vois plus le python comme un langage de programmation, et perl comme un langage de script.

Pour ce que tu veux faire, un script est suffisant (d'où mon allusion à Perl).
Maintenant, ce qui est faisable par un script est faisable par une application. C'est juste au niveau de la conception que ça diffère.
BSans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h03   #7
Invité de passage
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 4
Points : 4
Ma réponse était juste une pic gratuite en tout cas merci de ton éclaircissement.
totorux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h41   #8
Membre habitué
 
Inscription : avril 2009
Messages : 153
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : avril 2009
Messages : 153
Points : 135
Points : 135
Je viens de relire le script que je t'avais proposé, en fait il y aurait une correction à y apporter.

par défaut, find va afficher tous les "chemins" qu'il trouvera à partir de la racine que tu lui fournis.

Exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
moi@toto$ pwd
/home/moi
moi@toto$ mkdir -p titi/{blah,blih,bloh}
moi@toto$ touch titi/{blah,blih,bloh}/machin
moi@toto$ find titi
titi
titi/blah
titi/blah/machin
titi/blih
titi/blih/machin
titi/bloh
titi/bloh/machin
moi@toto$
Comme on ne veut intervenir dans un premier temps que sur les fichiers (tu comprendras également que renommer les dossier peut poser problème pour la suite de la boucle), on ajoute l'option -type f à find.

Code :
1
2
3
4
5
6
 
moi@toto$ find titi -type f
titi/blah/machin
titi/blih/machin
titi/bloh/machin
moi@toto$
BSans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 14h49   #9
Futur Membre du Club
 
Inscription : juin 2002
Messages : 55
Détails du profil
Informations personnelles :
Âge : 33
Localisation : France, Indre et Loire (Centre)

Informations forums :
Inscription : juin 2002
Messages : 55
Points : 17
Points : 17
J'utilise métamorphose : http://file-folder-ren.sourceforge.net/
__________________
Entre Ce que je pense, Ce que je veux dire, Ce que je crois dire, Ce que je dis, Ce que vous avez envie d'entendre, Ce que vous entendez, Ce que vous comprenez... il y a dix possibilités qu'on ait des difficultés à communiquer. Mais essayons quand même...
Bernard Werber
ludo.guy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2010, 16h36   #10
Invité de passage
 
Inscription : février 2010
Messages : 19
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 19
Points : 4
Points : 4
ludo.guy Toi je t'aime !
Mille merci il a l'aire souple et configurable, et je doute qu'avec mes pauvre compétence je pourrais faire un centième de se qu'il fait.
Encore super merci.

Merci aussi a ceux qui m'ont aider et pour vos idées

Totorux
totorux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 08h09.


 
 
 
 
Partenaires

Hébergement Web