Řešení 1:
Jediné znaky nepovolené v názvu souboru v *nix jsou NUL
a /
. V systému Windows pouze NUL
, :
a \
skutečně nejsou povoleny, ale mnoho aplikací to dále omezuje a také zabraňuje ?
, *
, +
a %
.
Žádné znaky v názvu souboru nikdy nepotřebují být escapován, pokud to není nutné, aby nebyl interpretován shellem.
Řešení 2:
V článku Wikipedie o názvech souborů je diskuze o znacích názvů souborů.
Tento esej může být informativní:Oprava názvů souborů Unix/Linux/POSIX.
Tento článek porovnává OS X a Windows XP:X vs. XP:Zakázané znaky v názvech souborů (PDF, viz str. cca 64-66).
Věci, které by neměly být v názvech souborů za 1 000 $ Alex
Nevím, které znaky musí být un -escaped, ale v Linuxu pravděpodobně není dobrý nápad escapovat znaky, které mohou mít speciální význam, jako je "n" (nový řádek), "t" (tabulátor) a další, ale to obecně není problém při operacích se soubory. Možná máte na mysli „uniklý“ spíše než „neuniklý“. Nejběžnější jsou ty, které shell interpretuje, jako je mezera, ">", "<" atd. Diskusi o nich najdete v některých článcích, na které jsem odkazoval.
Řešení 3:
Pokud vytvoříte soubor ve Windows pomocí Průzkumníka pomocí jednoho z následujících znaků, bude si stěžovat, že znaky nejsou povoleny:
\ / : * ? " < > |
Dobrá reference je zde:
Pojmenování souborů, cest a jmenných prostorů
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
Microsoft dále uvádí:
"... na platformách stolních počítačů se systémem Windows mohou neplatné znaky cesty obsahovat znaky ASCII/Unicode 1 až 31 a také uvozovky ("), menší než (<), větší než (>), svislou čáru (|), backspace (\b), null (\0) a tabulátor (\t)."
http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx
Řešení 4:
Na Linuxu a dalších systémech kompatibilních s POSIX je "/" vyhrazeno jako oddělovač adresářů a "\0" (znak NULL) označuje konec řetězce. Vše ostatní je povoleno.