Est-il correct d'utiliser certains caractères spéciaux, comme +
, &
, '
, .
(point) et ,
(virgule), fondamentalement, dans les noms de fichiers.
Je comprends que vous pouvez utiliser -
et _
sans problème, mais faire des recherches, j'ai été incapable de trouver quelque chose de défini sur les autres symboles; Certains disent que vous pouvez, certains disent que vous ne pouvez pas, et d'autres disent que c'est "non encouragé" de les utiliser (peu importe ce que cela signifie).
Comme les autres ont déclaré, sur des systèmes modernes Unix/Linux, les noms de fichier peuvent contenir n'importe quel caractère sauf pour \0
(Nul) et /
(slash).
En plus de cela, la norme POSIX définit un ensemble de caractères portable pour les noms de fichiers:
,278 jeu de caractères de nom de fichier portable
L'ensemble de caractères à partir desquels des noms de fichiers portables sont construits.
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 . _ -
Les trois derniers caractères sont les <Période>, <SADERSCORE> et <HYHEN> caractères, respectivement. Voir aussi pathname .
Le pathchk
utilitaire de GNU coreutils vérifie pour cela lorsqu'il est appelé avec le -p
option, et le -P
L'option mettra en garde sur les noms de fichier vides (qui ne sont pas valides mais peuvent être transmis comme un argument à pathchk
) et noms de fichier commençant par un trait d'union (-
).
Le pari le plus sûr consiste à faire référence à l'entrée Wikipedia pour le jeu de caractères autorisé pour tout système d'exploitation. Il peut être trouvé à partir de ici .
Par exemple, pour la plupart des systèmes basés sur UNIX, le jeu de caractères autorisé est défini par 8 bits et le caractère réservé est le caractère null (nul, '\0'
). Cependant, ce n'est pas une bonne pratique d'utiliser les caractères spéciaux des noms de fichiers car ils posent un problème lors de leur retrait.
Par exemple, je peux avoir un nom de fichier comme -ramesh.txt
Et j'essaie de le supprimer comme ci-dessous.
rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
J'ai besoin de supprimer le fichier comme,
rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y
Plus de détails peuvent être trouvés à partir de cette réponse aussi .
Sous Linux et os-x uniquement
/
De l'imprimable ASCII set est interdit je crois. Certains caractères (shell métacaracters comme*?!
) Entraînera des problèmes de commande lignes et nécessitera que le nom de fichier soit cité de manière appropriée ou échappée.Les systèmes de fichiers Linux tels que EXT2, EXT3 sont l'agnostique de caractère (je pense qu'ils ne le traitent pas plus ou moins comme un flux d'octets - seulement des nulls et
/
Sont interdits). Cela signifie que vous pouvez stocker des noms de fichiers dans l'encodage UTF-8. Je crois que cela appartient à la coquille ou à une autre application de savoir quel codage à utiliser pour convertir correctement le nom de fichier pour l'affichage ou le traitement.
Donc, pour conclure, le problème ne consiste pas à utiliser les caractères spéciaux pour les noms de fichiers, mais sur la façon de les gérer.
Vos recherches sont presque correctes. Il est possible d'utiliser des caractères spéciaux dans les noms de fichiers, mais il n'est pas conseillé car ces personnages ont une signification particulière. Les conventions de nommage de fichiers sous Linux décrit d'autres restrictions sur les noms de fichiers ainsi que "Les noms de fichier ne doivent jamais commencer par un trait d'union".
Simple exemple d'opérations de ligne de commande effectuant des caractères spéciaux dans les noms de fichiers.
En tant que note personnelle, je préfère éviter les caractères spéciaux des noms de fichiers car ils ont besoin d'une attention particulière lorsque ces fichiers sont utilisés pour tout traitement. Ainsi, supprimer la préoccupation de traiter des caractères spéciaux du processus de développement.