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