Caratteri consentiti nel nome del file

Dove posso trovare un elenco di caratteri consentiti nei nomi dei file, a seconda del sistema operativo? (ad esempio su Linux, il carattere : è consentito nei nomi di file, ma non su Windows)

Potresti iniziare con la pagina Nome file di Wikipedia . Ha una tabella abbastanza decente ( Confronto delle limitazioni dei nomi dei file ) che elenca i caratteri riservati per un numero elevato di file system.

Oltre ai nomi di file riservati come CON in MS-DOS. Ricordo di essere stato morso da quella volta quando ho accorciato il file include da const.h a con.h e con.h trascorso mezz’ora a capire perché il compilatore era appeso. Si scopre che le estensioni DOS ignorate per i dispositivi in ​​modo che con.h fosse esattamente la stessa cosa di con , la console di input (il che significava, naturalmente, che il compilatore mi stava aspettando per digitare il file di intestazione prima che continuasse).

Su Windows OS crea un file e assegnagli un carattere non valido come \ nel nome del file. Di conseguenza otterrai un popup con tutti i caratteri non validi in un nome file.

inserisci la descrizione dell'immagine qui

OK, quindi guarda il confronto dei file system se ti interessano solo i file system dei giocatori principali:

  • Windows (FAT32, NTFS): qualsiasi Unicode tranne NUL , \ , / , : , * , " , < , > , |
  • Mac (HFS, HFS +): qualsiasi Unicode valido tranne : o /
  • Linux (ext [2-4]): qualsiasi byte tranne NUL o /

quindi ogni byte eccetto NUL , \ , / , : , * , " , < , > , | e non puoi avere chiamate file / cartelle o .. e nessun carattere di controllo (ovviamente).

Per essere più precisi su Mac OS X (ora chiamato MacOS) / nel Finder si interpreta : nel file system Unix.

Questo è stato fatto per la compatibilità con le versioni precedenti quando Apple si è spostato da Classic Mac OS.

È legittimo utilizzare un / in un nome file nel Finder, guardando lo stesso file nel terminale che verrà visualizzato con :

E funziona anche il contrario: non è ansible utilizzare un / in un nome file con il terminale, ma a : è OK e verrà visualizzato come / nel Finder.

Alcune applicazioni potrebbero essere più restrittive e proibire entrambi i personaggi per evitare confusione o perché mantenevano la logica dal precedente Mac OS classico o per la compatibilità dei nomi tra le piattaforms.

Ecco il codice per pulire il nome del file in python.

 import unicodedata def clean_name(name, replace_space_with=None): """ Remove invalid file name chars from the specified name :param name: the file name :param replace_space_with: if not none replace space with this string :return: a valid name for Win/Mac/Linux """ # ref: https://en.wikipedia.org/wiki/Filename # ref: https://stackoverflow.com/questions/4814040/allowed-characters-in-filename # No control chars, no: /, \, ?, %, *, :, |, ", <, > # remove control chars name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C') cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name) if replace_space_with is not None: return cleaned_name.replace(' ', replace_space_with) return cleaned_name