On Sat, 2007-03-10 at 16:03 +0100, Nigel Henry wrote:
On Friday 09 March 2007 01:13, Les wrote:
> > I have a question about du though. On the other machine where I wanted to
> > find out the size of my soundfiles directory, du couldn't access it
> > because it was named "Sounds Library" , without the quotes. I renamed
it
> > putting a hyphen between the 2 words, and then du accessed the directory
> > ok, but all of the subdirectories are multi worded without any hyphens,
> > and du didn't have any problem with them. Any reason why du will not
> > access the main directory without hyphenated words, and yet has no
> > problem with all the subdirectories?
> >
> > It's not a big deal, just puzzling.
> >
> > btw. The now Sounds-Library (with the hyphen) is on a separate harddrive
> > so I have to run du as.
> >
> > du -sh /mnt/hdb5/Sounds-Library
>
> Hi, Nigel,
> The reason a command won't parse correctly with a space in the file
> name is due to the tokenizer used by the shell. It cannot deal with
> spaces in filenames. A space is the end of the word to the tokenizer
> unless it is inside Quotes or escaped in some way. Thus the command du
> xxx yyy is going to look for files xxx and then yyyy. This is true of
> most systems. otherwise there would be no way to chose which way to
> parse a command with several arguments, for example:
> cat xxx yyy aaa bbb ccc ddd > temp.txt
>
> In this case should the result consist of files xxx, yyy, zzz, bbb,
> ccc, and ddd all being concatenated to a file called temp.txt, or should
> it be xxx yyy, zzz bbb, and ccc ddd? Moreover how would an unambiguous
> error message tell the operator what was wrong? What if files xxx, yyy
> zzz, bbb zzz, and ddd were all present? Is this what the operator
> meant?
> This is why a good administrator doesn't put spaces in system control
> files. It leads to ambigousity when working on the system, leading to
> errors and system corruption. Typo's that would be caught might not be
> if spaces are allowed into filenames.
>
> On the other hand, once a directory is opened, the file names are read
> via a special command designed for the OS, and if the OS permits spaces,
> the entire file name up to the end charactor (generally control-Z or
> NULL). Thus the sub directories and files will be correctly handled.
> But with spaces in the names, error messages regarding parsing, or
> tracing the file contents may be ambiguous to the operator. It is not
> illegal to put spaces in filenames, but is should be considered a bad
> practice, and avoided. But it is your system, so YMMV.
>
> Regards,
> Les H
Thanks Les for that very thorough explanation. I will be more carefull about
spaces in the future.
A related question, is. How do I find out how many files are in the
Sounds-Library directory, including all subdirectories. I looked at ls, but
that will only give a list of files, as far as I can see.
Thanks.
Nigel.
There may be better techniques, but I have used something like:
% ls -al | grep -c '\n'
Which does the recursive list and then counts the lines. This will
include the directories I think, but you can try it. There are also
varients of the du, df, and ls commands that can provide this sort of
functionality.
Try:
% man -k file
To see a list of commands that work on files. Some of the Admin
specific folks can offer help on this as well.
Regards,
Les H.