- To: Alexander Samad <alex@xxxxxxxxxxxx>
- Subject: Re: [SLUG] spaces in filenames - bash scripting problem - SOLVED
- From: david <david@xxxxxxxxxxxxx>
- Date: Sat, 20 May 2006 18:52:36 +1000
- Cc: slug@xxxxxxxxxxx
- Reply-to: david@xxxxxxxxxxxxx
On Sat, 2006-05-20 at 18:42 +1000, Alexander Samad wrote:
true genius at work here!
that worked, thank you.
> On Sat, May 20, 2006 at 05:34:52PM +1000, david wrote:
> > On Sat, 2006-05-20 at 15:25 +1000, david wrote:
> >
> > My latest attempt below... and it works all the way down to the mv line,
> > but then fails because of the spaces. I get this diagnostic:
> >
> > mv: when moving multiple files, last argument must be a directory
> >
> >
> > #!/bin/bash
> > # takes the first 3 chars of each directory name and
> > # prepends it to the file names within that directory.
> >
> > ls | while read x
> > do
> > y=$(echo "$x" | cut -c -3)
> > ls "$x" | while read z
> > do
> > mv "$x"/"$z" "$x"/$y"$z"
>
> try mv "$x/$z" "$x/$y$z"
>
> > done
> > done
> >
> >
> >
> >
> > > On Sat, 2006-05-20 at 15:12 +1000, Howard Lowndes wrote:
> > > >
> > > I've changed the scrip thus:
> > >
> > > #!/bin/bash
> > > cd /home/david/test
> > > for x in $(ls)
> > > do
> > > y=$(echo "$x" | cut -c -3)
> > > for z in $(ls "$x")
> > > do
> > > mv "$x"/"$z" "$x"/$y"$z"
> > > done
> > > done
> > >
> > > but this is what i get:
> > >
> > > david@test:~ $ ls -l test
> > > total 12
> > > drwxr-xr-x 2 david david 4096 2006-05-20 15:16 1test
> > > drwxr-xr-x 2 david david 4096 2006-05-20 15:16 2test
> > > drwxr-xr-x 2 david david 4096 2006-05-20 15:14 3 test
> > > david@test:~ $ ls test/3\ test/
> > > 3 test
> > > david@test:~ $ ./shelltest
> > > ls: 3: No such file or directory
> > > ls: test: No such file or directory
> > > david@test:~ $
> > >
> > >
> > >
> > > > david wrote:
> > > > > The scrip works as long as there are no blanks.... unfortunately there
> > > > > are lots of blanks in both directories and filenames. Can anyone tell me
> > > > > what i should be doing?
> > > > >
> > > > > #!/bin/bash
> > > > > # takes the first 3 chars of each directory and
> > > > > # prepends it to the file names in that directory.
> > > > >
> > > > > #cd /home/david/Desktop/musicbyalbum
> > > > > cd /home/david/test
> > > > > for x in $(ls)
> > > > > do
> > > >
> > > > I think this might work for you
> > > >
> > > > y=$(echo "$x" | cut -c -3)
> > > > for z in $(ls "$x")
> > > > do
> > > > mv "$x"/"$z" "$x"/"$y""$z"
> > > >
> > > >
> > > > > done
> > > > > done
> > > > >
> > > > >
> > > >
> > > > --
> > > > Howard.
> > > > LANNet Computing Associates - Your Linux people <http://lannetlinux.com>
> > > > When you want a computer system that works, just choose Linux;
> > > > When you want a computer system that works, just, choose Microsoft.
> > >
> >
> > --
> > SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
> > Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html
> >
> --
> SLUG - Sydney Linux User's Group Mailing List - http://slug.org.au/
> Subscription info and FAQs: http://slug.org.au/faq/mailinglists.html