Comment renommer récursivement des fichiers / dossiers pour rendre leurs noms compatibles avec Windows?

11

J'ai un tas de fichiers sur une boîte Ubuntu, qui ont différents caractères dans leurs noms de fichiers que Windows n'accepte pas (principalement ":" et "*", mais peut-être d'autres).

Quelle est la façon la plus simple de les renommer et de les déplacer sur une machine Windows? Il est OK de remplacer ces caractères par quelque chose comme "[deux points]" et "[astérisque]".

RomanSt
la source
1
Vous devez éviter de tels noms même sous Linux (en particulier *).
cYrus
4
@cYrus Dépend de la façon dont vous gérez les fichiers. J'imagine que ce n'est qu'un problème avec les scripts et les shells. Je suis sur OS X et le seul personnage interdit est :, ce qui est déjà assez mauvais. Nommer les documents après leur contenu est utile, et si le nom d'un article se termine par une question, le nom du fichier devrait l'être également.
Daniel Beck
@cYrus et moi, dans mon logiciel, mais certains logiciels ont été écrits par des gens qui ne le font pas. Par exemple, qmail utilise: dans presque tous les noms de fichiers qu'il crée.
RomanSt
@Daniel Beck: Bien sûr, mais malheureusement, avoir un système de fichiers qui prend en charge de tels noms n'est pas suffisant car vous pouvez utiliser des programmes qui gâchent le tout. Je n'utilise même pas d'espaces.
cYrus
2
@Steven bonne question! Je pense que Windows serait légèrement plus utile, car il peut arriver que quelqu'un reçoive les fichiers sur Windows et doive les corriger sur cette plate-forme.
Peltier

Réponses:

4

Jetez un oeil à renommage Glindra et désintoxication .

Les utilitaires de fichiers Glindra peuvent être installés sur Windows ou Linux. Exemples de nettoyage des noms de fichiers sous Windows:

rena *.* -portable

rena *.* -safe
  • -safe
    Mappe les tirets (traits d'union) aux traits de soulignement.
    Réduit les espaces.
    Mappe les caractères problématiques comme * ?: [] "<> | () {} pour souligner.
  • -portable
    Effectue les mêmes opérations de nettoyage que -safe, et en plus:
    mappe tous les caractères 8 bits de la moitié supérieure de l'alphabet latin 1 à des caractères de secours raisonnables de 7 bits.
    Mappe les caractères de guillemet simple `` ´ pour souligner.

Source: Correction des noms de fichiers Unix / Linux / POSIX: caractères de contrôle (tels que Newline), tirets principaux et autres problèmes

En pause jusqu'à nouvel ordre.
la source
Cette page affiche une 404 copie en cache de Google .
Daniel Beck
C'est une superbe diatribe de David Wheeler! Surtout après que je venais de frapper mon clavier après avoir essayé de cd dans un répertoire que JungleDisk a nommé "~ \ irina". Voulez-vous deviner si la complétion des onglets a fonctionné? ...
RomanSt
1
Detox sert à rendre les fichiers Windows compatibles avec Unix, et non l'inverse.
endolith
3
@DennisWilliamson - Il semble que glindra (pour Windows) ne puisse pas renommer les caractères avec des noms de fichiers invalides. G:\spc>rena.exe -safe -portable *.txtsorties[FATAL-ERROR] Filename syntax error: aa:a.txt
Steven
1
Notez le changement de syntaxe lorsque rena '*.*' -portablevous passez à Linux, c'est-à-dire , et si vous voulez qu'il soit récursif, utilisez quelque chose comme rena '***/*.*' -portablesous Linux. Et je crois que le changement de nom devrait être fait sous Linux, pas sous Windows.
holroy
4

Essayez Recuva .

C'est le seul utilitaire Windows que j'ai trouvé qui gère les noms de fichiers non compatibles avec Windows.

Activez la recherche de fichiers non supprimés (pour la récupération à partir de disques endommagés ou reformatés) et analysez votre dossier. Lors de la restauration, activez la structure de dossier Restaurer . Recuva "copiera" efficacement le répertoire entier vers un autre emplacement tout en "santitisant" les noms de fichiers hostiles.

Steven
la source
1

Sans être sous Linux et sans rien tester, je pense que l'on pourrait utiliser des one-liners comme ceux ci-dessous.

Pour changer un caractère:

find . -type f -exec rename 's/:/\[colon\]/g' {} +
find . -type f -exec rename 's/\*/\[asterisk\]/g' {} +

Et enfin pour supprimer tous les caractères non alphanumériques:

find . -type f -exec rename 's/[^A-Za-z0-9._]//g' {} +
harrymc
la source
Notez que cela doit être étendu avec tous les autres caractères illégaux de Windows, c'est<>:"/\|?*
holroy
0

Si vos fichiers se trouvent déjà sur un volume NTFS, il semble que l'exécution de chkdisk à partir de Windows "résout" le problème. Malheureusement, il semble que ce soit le cas en supprimant les fichiers incriminés.

Peltier
la source
0

J'ai réussi avec une combinaison des deux premières réponses, plus pyRenamer (GUI). Sous Linux, j'ai utilisé pyRenamer pour réduire les espaces dans les noms de dossiers (répertoires) - en remplaçant l'espace par rien - afin que les autres programmes (Glindra renomment) fonctionnent récursivement (on pourrait placer des soulignements). À partir des fichiers, j'ai également retiré certains caractères ou mots acceptables par Windows pour économiser de l'espace, ainsi que des espaces réduits dans les noms de fichiers. J'ai ensuite exécuté rena pour supprimer les caractères non Windows, enregistré sur un lecteur flash, puis utilisé Recuva pour «restaurer» dans un dossier sous Windows. Recuva indique si un chemin de fichier est trop long (et il supprime également les caractères non Windows). Je n'ai pas encore trouvé d'outil qui vérifie le chemin des noms de fichiers pour voir s'ils sont inférieurs à la limite maximale de Windows de 255 (ou disons 240 pour permettre une certaine latitude).

Vitex
la source