renomage en masse de fichier avec des foutu charset :(

renomage en masse de fichier avec des foutu charset :( - Divers - Linux et OS Alternatifs

Marsh Posté le 24-06-2003 à 13:28:37    

voila, j'ai un partage samba qui dans un premier temps ne faisait pas la conversion des caractères spéciaux, du coup sur le serveur linux on se retrouvait avec plein de "fichier sp?ciaux" c'est assez chiant, j'ai alors rajouté un client code page = 850 et character set = ISO8859-1, ca marche evidemment tres bien pour les nouveaux fichiers créés, mais les anciens sont toujours au mauvais format. Pire, comme samba fait la conversion dans l'autre sans (alors que ces fichiers sont deja en ISO8859-1 puisque créés depuis windows avec samba sans conversion) ils sont carements invisibles depuis windows.
 
Alors j'ai déja commencé a renomer les fichiers les plus important, il y en a un bon paquet ! En plus c'est chiant car un ne sais pas taper directement le nom du fichier avec ces foutus caractères, je suis obligé d'utiliser l'auto completion, et si par malheur ya plusieurs fichiers qui commencent pareil, je suis foutu
 :fou:  
 
Donc ma question : qqun connait-il un moyen de renomer tout ces fichiers avec des caracteres spéciaux "windowsiens" sur un fs linux (ext3 en l'occurence)
 
Je me disais dans une espoir fous qu'il existerait un petit programme ou script qui scanne tout les rep et detectes les fichiers avec des caractères spéciaux et les convertisses...

Reply

Marsh Posté le 24-06-2003 à 13:28:37   

Reply

Marsh Posté le 24-06-2003 à 14:42:59    

Si tu connais un peu le perl, ca doit pas être très long à faire. Sinon va falloir chercher...
 
CHaiCA

Reply

Marsh Posté le 24-06-2003 à 15:39:15    

mv et tr sont tes amis :-P

Reply

Marsh Posté le 24-06-2003 à 16:07:49    

splurf a écrit :

mv et tr sont tes amis :-P

je dirais plutot find et rename mais bon... :o

Reply

Marsh Posté le 24-06-2003 à 16:56:01    

et pourquoi pas mv et tr? :-P

Reply

Marsh Posté le 24-06-2003 à 17:34:38    

ben passke pour explorer une arborescence avec des critères précis, on a quand même pas fait mieux que find et que pour renomer un fichier en utilisant la puissance des regexp de perl, ben faut utiliser rename ! [:spamafote]
 
 
bon maintenant, tous le monde est libre, hein ! :D

Reply

Marsh Posté le 24-06-2003 à 18:18:25    

vi, mais bon, qd on peut éviter l'usine à gaz.....
 
genre renommer des fichiers de minuscules en majuscules  
 

Code :
  1. for i in *
  2. do
  3. mv $i `echo $i | tr 'a-z' 'A-Z'`
  4. done


apres, ça doit s'adapter.....
 
enfin, ct ma contrib à ce post :-P


Message édité par splurf le 24-06-2003 à 18:18:50
Reply

Marsh Posté le 24-06-2003 à 18:36:48    

splurf a écrit :

vi, mais bon, qd on peut éviter l'usine à gaz.....
 
genre renommer des fichiers de minuscules en majuscules  
 

Code :
  1. for i in *
  2. do
  3. mv $i `echo $i | tr 'a-z' 'A-Z'`
  4. done


apres, ça doit s'adapter.....
 
enfin, ct ma contrib à ce post :-P

et si ton arborescence est plus profonde ?  
et si tu veux juste renommer les fichiers dont le nom contient "wahoga" à partir de la 4ème lettre ? et si tu veux tronquer les noms de fichier qui contiennent un numéro ?
 
et ben là, tu utilise find et rename ! :D  :whistle:

Reply

Marsh Posté le 24-06-2003 à 18:37:58    

tootafai :-P

Reply

Marsh Posté le 24-06-2003 à 23:59:24    

merci bien, mais ca me dis pas vraiment comment utiliser que se soit find ou tr car il faut a un moment ou a un autre devoir taper ces fichus caracteres dans les arguments :(

Reply

Marsh Posté le 24-06-2003 à 23:59:24   

Reply

Marsh Posté le 25-06-2003 à 01:14:38    

un début de réponse pour des fichiers dans un seul et meme répertoire
 

Code :
  1. typeset -i var
  2. var=0
  3. ext=doc
  4. for i in *.$ext
  5. do
  6. mv $i fichier$var.$ext
  7. var=$var+1
  8. done


ext étant le type de document jpg, gif, doc, rtf, xls....
Attention => TOUS les fichiers auront leur nom modifié


Message édité par splurf le 25-06-2003 à 01:32:34
Reply

Marsh Posté le 25-06-2003 à 01:46:05    

solution un peu plus propre
 

Code :
  1. for i in *
  2. do
  3.   fic=`echo $i | sed -e 's/[^a-zA-Z0-9.-_()=#]//g'`
  4.   if [ -f $fic ];then
  5.     echo fichier $fic existant ou pas a modifier
  6.     echo "fichier $fic a pose probleme ou est identique" >> ~/erreur.rpt
  7.   else
  8.     mv $i $fic
  9.   fi
  10. done


 
 

Reply

Marsh Posté le 25-06-2003 à 10:49:43    

wé enfin, tu réinvente l'eau chaude là, tu le sais ? :D

Reply

Marsh Posté le 25-06-2003 à 16:15:13    

minusplus a écrit :

wé enfin, tu réinvente l'eau chaude là, tu le sais ? :D


 
je me passerais volontiers de tes sarcasmes.
 
monsieur le gourou, toi qui es si malin, propose une solution, ça sera un peu plus CONSTRUCTIF
 
bonne soirée

Reply

Marsh Posté le 25-06-2003 à 17:23:29    

splurf a écrit :

un début de réponse pour des fichiers dans un seul et meme répertoire
 

Code :
  1. typeset -i var
  2. var=0
  3. ext=doc
  4. for i in *.$ext
  5. do
  6. mv $i fichier$var.$ext
  7. var=$var+1
  8. done


ext étant le type de document jpg, gif, doc, rtf, xls....
Attention => TOUS les fichiers auront leur nom modifié


 
heu c'est koi ca ? du perl ? precises paske la ...


---------------
get amaroK plugin
Reply

Marsh Posté le 25-06-2003 à 17:31:26    

ce ne sont pas des sarcasmes, c'est juste que je pense que c'est  plus efficace de faire :
 

find -type f |  rename '($a = $_) =~ s/[^a-zA-Z0-9.-_]//g; $b=1; my $c=$a; while(stat $c) { $c=$a.$b++ } ; $_ = $c; '


 
[:spamafote]

Reply

Marsh Posté le 25-06-2003 à 17:34:09    

minusplus a écrit :

ce ne sont pas des sarcasmes, c'est juste que je pense que c'est  plus efficace de faire :
 

find -type f |  rename '($a = $_) =~ s/[^a-zA-Z0-9.-_]//g; $b=1; my $c=$a; while(stat $c) { $c=$a.$b++ } ; $_ = $c; '


 
[:spamafote]


 :sol: YES
ca c'est du bon !


---------------
get amaroK plugin
Reply

Marsh Posté le 25-06-2003 à 17:36:50    

minusplus a écrit :

ce ne sont pas des sarcasmes, c'est juste que je pense que c'est  plus efficace de faire :
 

find -type f |  rename '($a = $_) =~ s/[^a-zA-Z0-9.-_]//g; $b=1; my $c=$a; while(stat $c) { $c=$a.$b++ } ; $_ = $c; '


 
[:spamafote]


 
tu pouvais pas le dire plus tot...............;

Reply

Marsh Posté le 25-06-2003 à 17:37:01    

:o :D

Reply

Marsh Posté le 25-06-2003 à 18:03:54    

modo boolay........si, si cai vrai :-D

Reply

Marsh Posté le 28-06-2003 à 12:33:23    

bon dans un premier temp j'aimerais bien lister tout les fichiers contenant ces caracteres non imprimable.
 
j'ai essayé un  
 

find -type f | egrep '[^a-zA-Z0-9.-_]'

 
 
Mais ca m'affiche tout les fichiers. Comment qu'on fait ?
 
Je suis nul en expressions regulieres et je pige rien au truc de minusplus

Reply

Marsh Posté le 28-06-2003 à 13:05:08    

c'est bon j'ai trouvé, c'est iconv que je cherchait !
 
Juste un pb, voila ce que je fais :
 

for i in *.doc;do file=`echo $i | iconv -f 850 -t ISO8859-1`;  mv $i $file; done;

 
 
mais j'ai mv qui me retoutourne une erreur:
 

mv: when moving multiple files, last argument must be a directory
Try `mv --help' for more information.

 
 
 :(

Reply

Marsh Posté le 29-06-2003 à 16:22:09    

Code :
  1. mkdir /nouveaudossier && for i in *.doc;do file=`echo $i | iconv -f 850 -t ISO8859-1`;  mv $i /nouveaudossier; done;

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed