Noms de fichiers Linux / Windows / Unix /…: quels caractères sont autorisés? Lesquelles ne sont pas échappées?

43

Quels caractères sont autorisés et lesquels doivent être échappés sur la ligne de commande sous différents systèmes d'exploitation?

java.is.for.desktop
la source
Vous trouverez ci-dessous quelques réponses utiles, mais que tentez-vous d’atteindre? Coder vos propres routines de liste blanche de personnages n'est probablement pas la meilleure voie.
médina
Merci à tout le monde! Toutes les réponses sont utiles. Les informations dont j'ai besoin sont les suivantes: j'écris un outil qui marquerait les fichiers sur le système de fichiers en modifiant leur nom (pas de métadonnées).
java.is.for.desktop
Voir aussi la réponse sur le superutilisateur .
Pevik

Réponses:

27

Il y a une discussion sur les caractères des noms de fichiers dans l'article de Wikipedia sur les noms de fichiers .

Vous pouvez trouver cet essai informatif: Correction des noms de fichiers Unix / Linux / POSIX .

Cet article compare OS X et Windows XP: X et XP: Caractères interdits dans les noms de fichiers (PDF, voir pages environ 64 à 66).

Choses qui ne devraient pas figurer dans les noms de fichiers pour 1 000 $ Alex

Je ne sais pas quels caractères doivent être non échappés, mais sous Linux, ce n'est probablement pas une bonne idée d'échapper aux caractères pouvant avoir une signification spéciale, tels que "n" (nouvelle ligne), "t" (tab) et autres, mais ce n'est généralement pas un problème dans les opérations de fichiers. Peut-être que vous voulez dire "échappé" plutôt que "non échappé". Les plus courants sont ceux que l'interpréteur interprétera, tels que espace, ">", "<", etc. Voir quelques articles liés pour une discussion de ceux-ci.

En pause jusqu'à nouvel ordre.
la source
7
Ce n'est pas vraiment une réponse - toute l'information est externe. Et certains de ces liens sont cassés maintenant.
Steve Bennett
26

Les seuls caractères non autorisés dans un nom de fichier dans * nix sont NULet /. Sous Windows, seulement NUL, :et \sont vraiment pas autorisés, mais de nombreuses applications limitent que d' autres, ce qui empêche aussi ?, *, +et %.

À aucun moment, les caractères d'un nom de fichier ne doivent être échappés, à moins que cela ne soit nécessaire pour ne pas être interprété par le shell.

Ignacio Vazquez-Abrams
la source
Le deuxième point mérite d'être souligné. Habituellement, le terme "échappement" fait référence à un mécanisme de shell qui permet à l'utilisateur de spécifier des chaînes (par exemple, des noms de chemins) contenant des caractères que le shell traiterait autrement d'une manière particulière. Si l'OP signifie utiliser quelque chose comme «pourcentage d'encodage» pour encoder des caractères autrement interdits, il s'agit d'un «protocole de chemin d'accès» purement applicatif que chaque programme impliqué doit adopter (ou non).
Chris Johnsen
J'analyse un dossier avec readdir, puis j'essaie d'ouvrir les fichiers avec les noms qu'il renvoie. Certains d'entre eux ne parviennent pas à s'ouvrir avec ENOENT, ce qui suggère même pour le système d'exploitation que vous devez parfois vous échapper?
Gman
13

Si vous créez un fichier sous Windows avec l'Explorateur à l'aide de l'un des caractères suivants, les utilisateurs ne seront pas autorisés à se plaindre:

\ / : * ? " < > |

Une bonne référence est ici:

Attribution de noms aux fichiers, chemins d'accès et espaces de noms
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Microsoft ajoute:

"... sur les plates-formes de bureau Windows, les chemins d'accès non valides peuvent inclure les caractères ASCII / Unicode de 1 à 31, ainsi que guillemet ("), inférieur à (<), supérieur à (>), pipe (|), retour arrière (\ b), null (\ 0) et tabulation (\ t). "

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx

Greg Askew
la source
Je me souviens avoir lu il y a quelques années que Windows en mode utilisateur avait ces restrictions et était insensible à la casse ("ABC.txt" === "abc.txt"). Cependant, Windows en mode noyau a moins de restrictions et respecte la casse ("ABC.txt"! == "abc.txt" comme * NIX). Pour toutes fins utiles, cependant, les caractères ci-dessus s'appliqueront à la majorité des programmes car ils s'exécutent en mode utilisateur.
CubicleSoft
Je peux \ / : * ? " < > |tous les échapper et les créer avec mkdir sur mon système GNU / Linux. Vous pouvez également utiliser mkdir '?'pour créer le ?répertoire. J'ai utilisé le système de fichiers ramdisk et XFS pour le tester.
S.Goswami
5

Sur Linux et les autres systèmes compatibles POSIX, "/" est réservé car il s'agit du séparateur de répertoire et "\ 0" (le caractère NULL) désigne la fin de la chaîne. Tout le reste est autorisé.

Janneb
la source
1
Bien qu'il soit vivement recommandé d'éviter les sauts de ligne, les tabulations, les caractères de contrôle, etc., et de vous assurer que le nom du fichier est bien UTF-8.
Flimm