Quels caractères sont autorisés et lesquels doivent être échappés sur la ligne de commande dans différents systèmes d'exploitation?
Il y a une discussion sur les caractères des noms de fichiers dans l'article Wikipedia sur Noms de fichiers .
Vous pouvez trouver cet essai informatif: Fixing Unix/Linux/POSIX Filenames .
Cet article compare OS X et Windows XP: X vs XP: caractères interdits dans les noms de fichiers (PDF, voir pp 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 un - échappés, mais sous Linux, ce n'est probablement pas une bonne idée d'échapper aux caractères qui peuvent 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 sur les fichiers. Peut-être que vous voulez dire "échappé" plutôt que "sans échappatoire". Les plus courants sont ceux que Shell interprétera comme l'espace, ">", "<", etc. Voir certains des articles que j'ai liés pour une discussion de ceux-ci.
Les seuls caractères non autorisés dans un nom de fichier dans * nix sont NUL
et /
. Sous Windows, uniquement NUL
, :
, et \
ne sont vraiment pas autorisés, mais de nombreuses applications limitent cela, empêchant également ?
, *
, +
, et %
.
À aucun moment, aucun caractère d'un nom de fichier besoin ne doit être échappé, sauf si cela est nécessaire afin de ne pas être interprété par le shell.
Si vous créez un fichier sur Windows avec Explorer en utilisant l'un des caractères suivants, il se plaindra que les caractères ne sont pas autorisés:
\ / : * ? " < > |
Une bonne référence est ici:
Attribution d'un nom aux fichiers, chemins et espaces de noms
http://msdn.Microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
Microsoft déclare en outre:
"... sur les plates-formes de bureau Windows, les caractères de chemin d'accès non valides peuvent inclure les caractères ASCII/Unicode 1 à 31, ainsi que les guillemets ("), inférieurs à (<), supérieurs à (>), pipe (|), retour arrière (\ b), null (\ 0) et tab (\ t). "
http://msdn.Microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx
Sur Linux et autres systèmes compatibles POSIX, "/" est réservé car c'est le séparateur de répertoire, et "\ 0" (le caractère NULL) désigne la fin de la chaîne. Tout le reste est autorisé.