Convertir tous les noms au format Windows

Copier un dossier entier de mac vers pc devient vite un calvaire, en effet la copie est interrompue toutes les secondes pour prévenir qu’un nom de fichier est trop long.

En réalité le problème n’est pas la longueur mais des caractères spéciaux qui sont refusé par windows comme ? * / \ :…. etc

Voici une solution parmi d’autres pour renommer d’un coup tout le contenu d’un dossier. Je l’avais trouvé il y a 2 ans à cette adresse. En tout cas cela fonctionne parfaitement :

Créer un fichier mac2win.pl dont le contenu est :

#!/usr/bin/perl -w

# This script renames all the files supplied as command-line args
# where necessary so that the filename is acceptable to MS Windows
# Cameron Hayne (macdev@hayne.net), June 2004

use strict;

chomp(@ARGV = <STDIN>) unless @ARGV;

# The Microsoft document at
# http://support.microsoft.com/default…b;EN-US;100108
# says that the following characters are not allowed in filenames
# in each of the specified filesystems:
# FAT:   .  ”  /  \  [  ]  |  :  ;  ,  =
# NTFS:  ?  ”  /  \  <  >  |  :  *

# We don’t do anything with the dot (.) since it clearly is allowable
# in spite of what that document says.
# And we don’t do anything with the slash (/) since that character
# will not occur in OS X filenames and modifying it would cause
# troubles when a file path (with directories) is specified.
# The changing of the filenames is done via the ‘tr’ statements below.
# Each occurence of a character in the first curly brackets
# is replaced by the character in the second curly brackets.

foreach my $filename (@ARGV)
{
my $orig_filename = $filename;

$filename =~ tr{\\}{-};
$filename =~ tr{*?}{X};
$filename =~ tr{“><[]|:;,=}{_};

unless ($filename eq $orig_filename)
{
print “About to rename $orig_filename to $filename\n”;
if (-e $filename)
{
print “Oops, there already exists a file named $filename\n”;
print “Skipping the rename – you will have to do it manually\n”;
}
else
{
rename($orig_filename, $filename);
}
}
}

Puis en ligne de commande (dans le terminal donc) :

find /monrep | /rep/mac2pc.pl


Et voila, tous les fichiers sont renommés !

Malheureusement ce script ne remplace pas les / , il ne reste que cela à corriger. Et malheureusement il est très utilisé par les dates.

7 thoughts on “Convertir tous les noms au format Windows”

  1. Bonjour,

    existe-t-il un logiciel permettant cette conversion sous windows ?

    Nous utilisons des serveurs windows 2003 contenant des dossiers partagés accessibles aux utilisateurs mac, cependant beaucoup de leurs fichiers contiennent des caractères non reconnus par windows (régulièrement des ‘points’ sous les lettres).

    Merci par avance !

  2. justement quand j’ai écris ces lignes c’était après avoir cherché sans succès.
    Je n’avais trouvé qu’un soft sur un site qui n’inspirait vraiment pas confiance.

    Comme le disait Louis, c’est incroyable d’ailleurs.

    Je suis preneur si quelqu’un trouve un soft. Surtout si on peut l’exécuter automatiquement toutes les nuits

  3. Bonjour Chris,

    merci pour cette réponse, je pense voir pour développer un programme sous vb .net pour régler ça, je vous tiens au courant si je m’y met…

    sinon, pour la gestion du “/”, je suppose qu’il suffit de remplacer cette ligne :

    $filename =~ tr{”><[]|:;,/=}{_};

  4. Bonjour à tous,

    J’ai developpé un petit programme qui devrait en ravir quelques uns…

    Je l’ai testé chez moi il fonctionne bien, j’espère qu’il en sera de même chez vous, j’attends avec impatiente vos remarques !

    Voici le lien :

    http://dl.free.fr/qWziNT5yl

    Il suffit de dé-zipper tous les fichiers dans un dossier et d’utiliser KMC.exe par l’interface en l’executant.

    Il est aussi possible de l’utiliser en ligne de commande pour l’automatiser :

    Exemple :

    KMC.exe /ansi:0 /sub:1 /char: /path:C:\

    /ansi : sert à convertir les noms ansi en ascii, valeur 0 (désactivé) par défaut ; valeurs possibles : 0 ou 1

    /sub : sert à aller dans les sous-dossiers, valeur 1 (activé) par défaut ; valeurs possibles : 0 ou 1

    /char : défini le caractère(s) de remplacement des caractères MAC, vide par défaut (attention, il n’est pas possible de lui assigner d’espace en mode ligne de commande)

    /path : défini le chemin d’accès du répertoire, valeur à définir obligatoirement, argument à passer obligatoirement en dernier !

    Il est donc possible par exemple de faire cela :

    KMC.exe /path:D:\Mes documents

  5. Bonjour,

    Pas de nouvelles ? Pas de commentaires ? Personne n’a testé ?

    Pour ma part nous avons commencé à l’utiliser chez quelques clients, et le seul problème rencontré est un plantage du logiciel sur des fichiers ouverts et lors de l’analyse de dossiers volumineux (40Go).

    Pour le plantage des fichiers ouverts je vais tenter de résoudre ça (en les ignorants tout simplement, avec une liste des fichiers ignorés à la fin) ; mais pour l’analyse de dossiers volumineux ça me semble un brin plus compliqué…

    On m’a supposé avoir une liste d’aperçu des dossiers/fichiers avant et après modification… je n’en vois pas spécialement d’utilité mais je pense tout de même l’intégrer, qu’en pensez-vous ?

Leave a Reply

Your email address will not be published. Required fields are marked *