Bash Script Help - File Names With Spaces

Drew Tomlinson drew at mykitchentable.net
Tue Aug 17 15:13:36 UTC 2010


I have a collection of yearly top 100 Billboard mp3s in this format (all 
one line - sorry if it wraps):

/archive/Multimedia/Audio/Music/Billboard Top USA Singles/1980-028 Kenny 
Loggins - This Is It.mp3

I want to create symbolic links to the top 30 in 1966-1969 in another 
directory for easy migration to a flash card. Thus I invoked 'find' to 
get a list (again, all one line):

find -E "/archive/Multimedia/Audio/Music/Billboard Top USA Singles" 
-regex '.*19[6-9][0-9]-0[0-2][0-9].*'

(OK, I know this will only return the top 29)

'find' returns the complete filename as above:

/archive/Multimedia/Audio/Music/Billboard Top USA Singles/1980-028 Kenny 
Loggins - This Is It.mp3

Then I attempt to use 'basename' to extract the file name to a variable 
which I can later pass to 'ln'.  This seems to work:

basename "/archive/Multimedia/Audio/Music/Billboard Top USA 
Singles/1980-028 Kenny Loggins - This Is It.mp3"

returns (all one line):

1980-028 Kenny Loggins - This Is It.mp3

which is what I would expect.  However using it with 'find' give me this 
type of unexpected result:

for i in `find -E "/archive/Multimedia/Audio/Music/Billboard Top USA 
Singles" -regex '.*19[6-9][0-9]-0[1-2][0-9].*'`; do basename "${i}";done

1980-028
Kenny
Loggins
-
This
Is
It.mp3

Why is this different? And more importantly, how can I capture the file 
name to $i?

Thanks,

Drew

-- 
Like card tricks?

Visit The Alchemist's Warehouse to
learn card magic secrets for free!

http://alchemistswarehouse.com



More information about the freebsd-questions mailing list