Filenames with hyphens - UNIX style?


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
# 1  
Java Filenames with hyphens - UNIX style?

Hello everyone!
Filenames with hyphens instead of everything else that can be as a space - is it particularly UNIX style of naming or a general practice? It kinda is so in my mind that DOS guys use underscores as spaces and UNIX guys use dashes. Is it so?
# 2  
It is not true that hyphens are preferred over underscores in filenames in unix. Hyphens and space characters in filenames are not recommended in unix. Recent Microsoft Operating Systems seem to allow any character in a filename regardless of whether this gives difficulty to command-line commands or any interaction with non-Microsoft systems ... or even earlier Microsoft systems.
# 3  
I normally use underscores.
# 4  
@methyl: While spaces are obviously not, hyphens are recommended by the Unix standard except as first character.

@guest115:

Unix kernels do not make any limitations in filenames outside two forbidden characters, / and null i.e. \0 and two reserved filenames: . and ...

File systems, especially non Unix native ones, might be stricter, even when used on Unix.

For portability, POSIX recommends restricting filenames to the portable filename character set, i.e. uppercase and lowercase a-z, digits, dot, hyphen and underscore.

There are no specific recommendations in Unix about whether using hyphens or underscores as a separator. Files with embedded spaces are on the other hand not recommended but supported anyway. They just need proper quoting/escaping when used in the command line. Hyphens pose no problem outside when they are the first character of a file, in which case some tricks are usually required depending on the command used.

I just checked on a Solaris 11 fresh install and got these statistics analyzing 168522 filenames:
  • 27.57% contains at least an hyphen
  • 23.13% contains at least an underscore
  • 4.50% contains both an hyphen and an underscore
  • 0.00% contains a space character (not a single file)
Other statistics that might be interesting:
  • 2.34% are plain numbers
  • 11.89% are only composed of lowercase characters & optionally digits
  • 0.71% are only composed of uppercase characters & optionally digits
  • 22.87% have no extension
  • 94.53% comply with the POSIX portable filename character set: A-Z a-z 0-9 . - _
On this system at least, there is a slight preference for hyphens compared to underscores (I expected the opposite) but both are very common anyway, more than half of the files use at least one of these separators.

Last edited by jlliagre; 05-10-2012 at 03:40 AM..
These 4 Users Gave Thanks to jlliagre For This Post:
# 5  
@jliiagre
Recommendation to avoid hyphens and space characters in filenames did not come from the Posix "standard". They did however come from a cross-platform portability guides.
I never thought that is would happen but I am seeing more problems with filenames created on unix systems where the user thinks that they are on a Microsoft system:
Code:
"C:\March report - with summary figures"

The C:\ upsets my multi-platform backup software (you can never restore the file), the reverse solidus upsets scripts which process filenames (because it's a Shell special character) and the space-delimited hyphen will break any script which does not take special precautions.

I'd be interested in a further analysis of the Solaris kit filenames for colon characters and hash characters.
This User Gave Thanks to methyl For This Post:
# 6  
Unix is very permissive in what it accepts but quite restrictive in what it recommends. Your first reply seemed to imply Windows was too permissive while Unix wasn't. The reality is the opposite. Windows has more restrictions and peculiarities like refusing a file to be named null.h or com0.c, having a colon in its name, having a space as its last character and so on, not to mention the way it preserve case but doesn't allow files with the same name but different cases to stay in the same directory.

In any case, your example obviously violates the POSIX recommendations but is still a valid Unix filename. It is obviously unacceptable to Windows and possibly other OSes and defeat non rock-solid scripts.

If your backup software has issues processing this filename, that's a bug or a limitation of the storage format it uses, the OS or the file system. The venerable tar utility has no issues handling it:
Code:
$ touch 'C:\March report - with summary figures'
$ tar cvf foo.tar *es
a C:\March report - with summary figures 0K
a files 8388K
$ tar tvf foo.tar
-rw-r--r-- 60004/60004      0 May 11 17:14 2012 C:\March report - with summary figures
-rw-r--r--   0/0   8589076 Nov  9 16:07 2011 files
$ mkdir extract
$ cd extract
$ tar xvf ../foo.tar
x C:\March report - with summary figures, 0 bytes, 0 tape blocks
x files, 8589076 bytes, 16776 tape blocks
$ ls -l
total 2
-rw-r--r--   1 jlliagre jlliagre       0 May 11 17:14 C:\March report - with summary figures
-rw-r--r--   1 jlliagre jlliagre 8589076 Nov  9  2011 files

About your last request, here are the numbers I got:
  • 0.74% have colons (1242)
  • 0.00% hashes (2 files out of 168522)

Last edited by jlliagre; 05-11-2012 at 11:57 AM..
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #430
Difficulty: Medium
Variables in JavaScript can be defined using either the var, let, static or const keywords.
True or False?

9 More Discussions You Might Find Interesting

1. What is on Your Mind?

Coding Style at UNIX.com forums

Hi, as I mentioned in this thread(https://www.unix.com/shell-programming-and-scripting/280737-awk-function-return-permutations-n-items-out-m.html), a helpful coding style may improve overall value and support for people who come here and want to learn things the participants from unix.com have... (2 Replies)
Discussion started by: stomp
2 Replies

2. Shell Programming and Scripting

Script in Perl or awk to remove multiple hyphens

Dear all, I have a database of compound words. I want to retain only strings with a single hyphen and identify those strings which have more than one hyphen. I am giving an example below test-test test-test-test test-test-test-test-test good-for-nothing The regex/script should remove all... (11 Replies)
Discussion started by: gimley
11 Replies

3. Shell Programming and Scripting

Using grep with hyphens

This is on a RHEL 6 box with bash 4.1.2 I'm trying to to use grep to only find those lines containing matches that form whole words. The -w option works fantastic unless of course that word has a hyphen. The problem is I will get a hit on "test-group" which is a good thing, but I will also... (3 Replies)
Discussion started by: woodson2
3 Replies

4. Shell Programming and Scripting

Renaming mutiple files with hyphens in name

I have searched throught a host of threads to figure out how to rename mutiple files at once using a script. I need to convert 200+ files from: fKITLS_120605-0002-00001-000001.hdr to eStroop_001.hdr fKITLS_120605-0002-00002-000002.hdr to eStroop_002.hdr and so forth.... What is... (5 Replies)
Discussion started by: akenne3
5 Replies

5. What is on Your Mind?

Looking for a "Motivational Poster" Style unix command?

I am trying to figure out a sort of Motivational line that I could write as a short unix command... I don't know too much but something like Get everything you want in life sudo (get everything) (you want?) (life directory) Any ideas? Thank You very much Brad (4 Replies)
Discussion started by: ridesurf
4 Replies

6. Shell Programming and Scripting

find filenames like unix commands

Hi, I need to write a small script to search in some specific directories to check if any file is present with a unix command name... Means if the directory contains any files like cat, vi, grep, find etc i need to list those files into a file. Please help Thanks, D (6 Replies)
Discussion started by: deepakgang
6 Replies

7. Shell Programming and Scripting

[Unix] a dos style rename wont work

Hey guys i'm creating a dos style rename script, so if a user types say q14.* as the 1st param and b14.* as the 2nd and will rename all q14 files to b14 but keep the extensions, so i've developed nearly the full script "i think", if i use echo(echo "if $1 had been renamed it would now be... (3 Replies)
Discussion started by: fblade1987
3 Replies

8. Shell Programming and Scripting

Unix filenames and spaces

I have files on my unix boxes that users have created with spaces. Example: /tmp/project plan ls -l "/tmp/project plan" works fine. $/tmp>ls -l "/tmp/project plan" -rw-r--r-- 1 root other 0 Jan 31 12:32 /tmp/project plan I created a file called test and put just the... (2 Replies)
Discussion started by: x96riley3
2 Replies

9. UNIX for Dummies Questions & Answers

Unix History Question: Why are filenames/dirnames case sentsitive in Unix?

I tried looking for the answer online and came up with only a few semi-answers as to why file and directory names are case sensitive in Unix. Right off the bat, I'll say this doesn't bother me. But I run into tons of Windows and OpenVMS admins in my day job who go batty when they have to deal... (3 Replies)
Discussion started by: deckard
3 Replies

Featured Tech Videos