Nomi file Linux / Windows / Unix / ...: quali caratteri sono ammessi? Quali sono senza caratteri di escape?


43

Quali caratteri sono ammessi e quali di essi devono essere salvati dalla riga di comando in diversi sistemi operativi?


Di seguito sono riportate alcune risposte utili, ma cosa stai cercando di ottenere? La codifica delle routine con elenchi bianchi dei propri caratteri non è probabilmente la strada migliore.
medina,

Grazie a tutti! Tutte le risposte sono utili Ciò di cui ho bisogno delle informazioni è: sto scrivendo uno strumento che taggerebbe i file attraverso il filesystem, modificandone i nomi (senza metadati).
java.is.for.desktop,

Vedi anche la risposta sul superutente .
pevik,

Risposte:


27

C'è una discussione sui caratteri del nome file nell'articolo Wikipedia sui nomi dei file .

È possibile trovare questo saggio informativo: Correzione dei nomi dei file Unix / Linux / POSIX .

Questo articolo confronta OS X e Windows XP: X vs XP: caratteri proibiti nei nomi dei file (PDF, vedi pp circa 64-66).

Cose che non dovrebbero essere nei nomi dei file per $ 1,000 Alex

Non so quali personaggi debbano essere non salvati, ma in Linux, probabilmente non è una buona idea sfuggire ai personaggi che possono avere un significato speciale come "n" (newline), "t" (tab) e altri, ma questo non è generalmente un problema nelle operazioni sui file. Forse intendi "fuggito" anziché "non fuggito". I più comuni sono quelli che la shell interpreterà come spazio, ">", "<", ecc. Vedi alcuni degli articoli che ho collegato per una discussione di questi.


7
Questa non è davvero una risposta - tutte le informazioni sono esterne. E alcuni di questi collegamenti sono interrotti ora.
Steve Bennett,

26

Gli unici caratteri non consentiti in un nome file in * nix sono NULe /. In Windows, solo NUL, :e \sono veramente non ammessi, ma molte applicazioni limitano che ulteriori, anche impedendo ?, *, +, e %.

In nessun caso i caratteri di un nome file devono essere sottoposti a escape, ad eccezione di quanto richiesto per non essere interpretati dalla shell.


Il secondo punto merita enfasi. Di solito, "escape" si riferisce a un meccanismo di shell che consente all'utente di specificare stringhe (ad esempio nomi di percorsi) che contengono caratteri che la shell altrimenti tratterebbe in modo speciale. Se l'OP significa usare qualcosa come "codifica percentuale" per codificare caratteri altrimenti non consentiti, allora si tratta di un "protocollo di percorso" a livello di applicazione che ogni programma coinvolto deve adottare (o meno).
Chris Johnsen,

Sto eseguendo la scansione di una cartella con readdir quindi provando ad aprire i file con i nomi che restituisce. Alcuni di loro non riescono ad aprirsi con ENOENT, il che suggerisce che anche per il sistema operativo a volte devi fuggire?
Gman,

13

Se si crea un file su Windows con Explorer utilizzando uno dei seguenti caratteri, si lamenterà che i caratteri non sono consentiti:

\ / : * ? " < > |

Un buon riferimento è qui:

Denominazione di file, percorsi e spazi dei nomi
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Microsoft afferma inoltre:

"... su piattaforme desktop basate su Windows, i caratteri di percorso non validi potrebbero includere caratteri ASCII / Unicode da 1 a 31, nonché virgolette ("), minore di (<), maggiore di (>), pipe (|), backspace (\ b), null (\ 0) e tab (\ t). "

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


Ricordo di aver letto un paio d'anni fa che Windows in modalità utente ha queste restrizioni oltre ad essere case-sensitive ("ABC.txt" === "abc.txt"). Tuttavia, Windows in modalità kernel ha meno restrizioni ed è sensibile al maiuscolo / minuscolo ("ABC.txt"! == "abc.txt" proprio come * NIX). A tutti gli effetti, tuttavia, i caratteri sopra indicati si applicheranno alla maggior parte dei programmi perché vengono eseguiti in modalità utente.
CubicleSoft

Posso sfuggirli \ / : * ? " < > |tutti e crearli con mkdir sul mio sistema GNU / Linux. Puoi usare anche mkdir '?'per creare la ?directory. Ho usato il file system ramdisk e XFS per testarlo.
S.Goswami,

5

Su Linux e altri sistemi compatibili con POSIX, "/" è riservato in quanto è il separatore di directory e "\ 0" (il carattere NULL) indica la fine della stringa. Tutto il resto è permesso.


1
Sebbene sia altamente raccomandato evitare nuove righe, tabulazioni, caratteri di controllo e simili, e assicurarsi che il nome del file sia UTF-8 valido.
Flimm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.