I can't find good information about which characters are allowed and which of them must be unescaped on command line in different operating systems.

Please help! ;)

link|improve this question

There are some useful answers below, but what are you trying to achieve? Coding up your own character white-listing routines is probably not the best route. – medina Jun 12 '10 at 23:16
Thanks to everyone! All answers are helpful. What I need the info for is: I'm writing a tool which would tag files across the filesystem, by altering their names (no metadata). – java.is.for.desktop Jun 13 '10 at 12:48
feedback

4 Answers

up vote 4 down vote accepted

There's a discussion of filename characters in the Wikipedia article on File Names.

You may find this essay informative: Fixing Unix/Linux/POSIX Filenames.

This article compares OS X and Windows XP: X vs. XP: Forbidden Characters in Filenames.

Things That Shouldn’t Be in File Names for $1,000 Alex

I don't know which characters must be un-escaped, but in Linux, it's probably not a good idea to escape the characters that may have special meaning such as "n" (newline), "t" (tab) and others, but that's generally not a problem in file operations. Perhaps you mean "escaped" rather than "unescaped". The most common ones are ones that the shell will interpret such as space, ">", "<", etc. See some of the articles I linked for a discussion of those.

link|improve this answer
feedback

The only characters not allowed in a filename in *nix are NUL and /. In Windows, only NUL, :, and \ are truly not allowed, but many apps restrict that further, also preventing ?, *, +, and %.

At no point do any characters in a filename need to be escaped except as required in order to not be interpreted by the shell.

link|improve this answer
The second point deserves emphasis. Usually, “escaping” refers to a shell mechanism that allows the user to specify strings (e.g. pathnames) that contain characters which the shell would otherwise treat in a special manner. If the OP means using something like “percent encoding” to encode otherwise disallowed characters, then that is a purely application level “pathname protocol” that each involved program must adopt (or not). – Chris Johnsen Jun 13 '10 at 4:20
feedback

If you create a file on Windows with Explorer using one of the following characters, it will complain that the characters are not allowed:

\ / : * ? " < > |

A good reference is here:

Naming Files, Paths, and Namespaces
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Microsoft further states:

"... on Windows-based desktop platforms, invalid path characters might include ASCII/Unicode characters 1 through 31, as well as quote ("), less than (<), greater than (>), pipe (|), backspace (\b), null (\0) and tab (\t)."

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

link|improve this answer
feedback

On Linux and other POSIX compatible systems, "/" is reserved as it's the directory separator, and "\0" (the NULL character) designates the end of the string. Everything else is allowed.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.