GNU/Linux >> Tutoriels Linux >  >> Linux

Quels caractères sont interdits dans les noms de répertoires Windows et Linux ?

Restons simples et répondons d'abord à la question.

  1. Les caractères ASCII imprimables interdits sont :

    • Linux/Unix :

      / (forward slash)
      
    • Windows :

      < (less than)
      > (greater than)
      : (colon - sometimes works, but is actually NTFS Alternate Data Streams)
      " (double quote)
      / (forward slash)
      \ (backslash)
      | (vertical bar or pipe)
      ? (question mark)
      * (asterisk)
      
  2. Caractères non imprimables

    Si vos données proviennent d'une source qui autoriserait les caractères non imprimables, il y a plus à vérifier.

    • Linux/Unix :

      0 (NULL byte)
      
    • Windows :

      0-31 (ASCII control characters)
      

    Remarque : Bien qu'il soit légal sous les systèmes de fichiers Linux/Unix de créer des fichiers avec des caractères de contrôle dans le nom de fichier, cela peut être un cauchemar pour les utilisateurs de traiter de tels fichiers.

  3. Noms de fichiers réservés

    Les noms de fichiers suivants sont réservés :

    • Windows :

      CON, PRN, AUX, NUL 
      COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9
      LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9
      

      (à la fois seuls et avec des extensions de fichiers arbitraires, par exemple LPT1.txt ).

  4. Autres règles

    • Windows :

      Les noms de fichiers ne peuvent pas se terminer par un espace ou un point.


Un "guide complet" des caractères de nom de fichier interdits ne fonctionnera pas sous Windows car il réserve les noms de fichiers ainsi que les caractères. Oui, des caractères comme * " ? et d'autres sont interdits, mais il existe une infinité de noms composés uniquement de caractères valides qui sont interdits. Par exemple, les espaces et les points sont des caractères de nom de fichier valides, mais les noms composés uniquement de ces caractères sont interdits.

Windows ne fait pas la distinction entre les caractères majuscules et minuscules, vous ne pouvez donc pas créer un dossier nommé A si on s'appelle a existe déjà. Pire, des noms apparemment autorisés comme PRN et CON , et bien d'autres, sont réservés et interdits. Windows a également plusieurs restrictions de longueur; un nom de fichier valide dans un dossier peut devenir invalide s'il est déplacé vers un autre dossier. Les règles de dénomination des fichiers et des dossiers se trouvent dans la documentation Microsoft.

Vous ne pouvez pas, en général, utiliser du texte généré par l'utilisateur pour créer des noms de répertoire Windows. Si vous voulez autoriser les utilisateurs à nommer ce qu'ils veulent, vous devez créer des noms sûrs comme A , AB , A2 et al., stocker les noms générés par l'utilisateur et leurs équivalents de chemin dans un fichier de données d'application, et effectuer le mappage de chemin dans votre application.

Si vous devez absolument autoriser les noms de dossier générés par l'utilisateur, la seule façon de savoir s'ils ne sont pas valides est d'intercepter les exceptions et de supposer que le nom n'est pas valide. Même cela est semé d'embûches, car les exceptions levées pour les accès refusés, les lecteurs hors ligne et l'espace disque insuffisant se chevauchent avec celles qui peuvent être levées pour les noms non valides. Vous ouvrez une énorme boîte de mal.


Sous Linux et d'autres systèmes liés à Unix, il n'y a que deux caractères qui ne peuvent pas apparaître dans le nom d'un fichier ou d'un répertoire, et ceux-ci sont NUL '\0' et barre oblique '/' . La barre oblique, bien sûr, peut apparaître dans un nom de chemin, séparant les composants du répertoire.

La rumeur veut que Steven Bourne (de renommée "shell") avait un répertoire contenant 254 fichiers, un pour chaque lettre (code de caractère) qui peut apparaître dans un nom de fichier (à l'exception de / , '\0'; le nom . était le répertoire courant, bien sûr). Il a été utilisé pour tester le shell Bourne et a régulièrement fait des ravages sur des programmes imprudents tels que des programmes de sauvegarde.

D'autres personnes ont couvert les règles de Windows.

Notez que MacOS X a un système de fichiers insensible à la casse.

C'est Kernighan &Pike dans The Practice of Programming qui l'ont dit au chapitre 6, Testing, §6.5 Stress Tests :

Lorsque Steve Bourne écrivait son shell Unix (connu sous le nom de shell Bourne), il a créé un répertoire de 254 fichiers avec des noms à un caractère, un pour chaque valeur d'octet sauf '\0' et slash, les deux caractères qui ne peuvent pas apparaître dans les noms de fichiers Unix. Il a utilisé ce répertoire pour toutes sortes de tests de correspondance de modèles et de tokenisation. (Le répertoire de test a bien sûr été créé par un programme.) Pendant des années, ce répertoire a été le fléau des programmes d'arborescence de fichiers; il les a testés jusqu'à leur destruction.


Linux
  1. Dans quels langages Windows, Mac OS X et Linux sont-ils écrits ?

  2. Quels sont les appels OS/système natifs Windows et Linux effectués à partir de malloc() ?

  3. Qu'est-ce que le double point (..) et le point unique (.) sous Linux ?

  4. Quel système de fichiers utiliser lorsque vous utilisez à la fois Windows et Linux ?

  5. Comment \n et \r sont-ils gérés différemment sous Linux et Windows ?

Que sont les Snaps et comment les installer sur différentes distributions Linux

Que sont les journaux Linux et où les trouver

Quels sont ces processus Windows sous Linux ?

Qu'est-ce que la mémoire haute et la mémoire basse sous Linux ?

Commande top Linux :Que sommes-nous, sy, ni, id, wa, hi, si et st (pour l'utilisation du processeur) ?

Noms de fichiers Linux/Windows/Unix/... :Quels caractères sont autorisés ? Quels sont les non échappés ?