In article <[EMAIL PROTECTED]>,
 <[EMAIL PROTECTED]> wrote:
>for file in `ls -1`; do
>  newfile=`echo "$file" | sed 's/ /_/'`
>  echo "File is named ${file}"
>  echo "The new file is named ${newfile}"
>
>  mv "$file" "$newfile"
>done

>
>IHMO in the main-loop it is better to choose "ls -1", so the field
>separator is \n and there's only one filename in each line.

ls should detect that stdout is not a terminal and fall back to -1
automatically.  Granted, it can't hurt, but should be unnecessary.

However, a few comments.

First, why use ls at all?  Might as well use:
for file in *; do

Of course, since you are only interested in files with spaces in them,
while not limit to that in the first place?

[EMAIL PROTECTED]:37pm]~/foo(776) for file in *; do echo $file; done
a b
bar
[EMAIL PROTECTED]:37pm]~/foo(777) for file in *\ *; do echo $file; done
a b

Of course, if you have a lot of files, this technique simply doesn't work
as you'll overflow your max command line length.

You could go back to:
ls | while read; do

But you're processing every file again.

Another alternative might be something like:

find -name '* *' -maxdepth 1

I think maxdepth is gnu find specific, so keep that in mind (I don't have
access to any non-gnu systems to test).

>The next <big> thing is to put the filename into quotations. Now a
>filename, even with spaces, will be interpreted as one word.

Not just quotes, but prepend ./ too, in case any of your file names look
like "- -"

[EMAIL PROTECTED]:45pm]~/foo(793) find
.
./bar
./a b
./blah
./blah/c d
./ns
./- -
[EMAIL PROTECTED]:45pm]~/foo(794) ./ns
`././a b' -> `././a_b'
`././- -' -> `././-_-'
[EMAIL PROTECTED]:45pm]~/foo(795) cat ns
#!/bin/bash

find -name '* *' -maxdepth 1 | while read name; do
        newname=$(echo $name | tr ' ' '_')
        mv -iv "./$name" ./$newname
done


Heh... forgot that find will already add in the ./ ... clean up as
appropriate.

mrc

-- 
     Mike Castle      [EMAIL PROTECTED]      www.netcom.com/~dalgoda/
    We are all of us living in the shadow of Manhattan.  -- Watchmen
fatal ("You are in a maze of twisty compiler features, all different"); -- gcc
-
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs

Reply via email to