OT: bash help

Ian Malone ibmalone at gmail.com
Sun Jul 7 19:38:30 UTC 2013


On 7 July 2013 20:18, Mike Wright <mike.wright at mailinator.com> wrote:
> 07/07/2013 12:03 PM, Steve Searle wrote:
>>
>> Around 07:29pm on Sunday, July 07, 2013 (UK time), Mike Wright scrawled:
>>
>>> I'm trying to write a bash command to transcode some videos into audios
>>> but am having trouble with filenames that contain spaces.
>>>
>>> ls *flv
>>>
>>> returns this:
>>>
>>> Jorge Drexler - Al otro Lado del Río.flv
>>>
>>> But in a bash for loop it doesn't work.
>>>
>>> for f in `ls *flv`; do echo $f; done
>>>
>>> returns this:
>>>
>>> Jorge
>>> Drexler
>>> -
>>> Al
>>> otro
>>> Lado
>>> del
>>> Río.flv
>>>
>>> Anybody know how to keep $f intact?
>>
>>
>> Look at the use of the IFS internal variable in bash and do something
>> like:
>>
>> IFS=$(echo -en "\n\b"); for f in `ls *flv`; do echo $f; done
>>
> exactly what I needed.  I'd never discovered IFS before
>
> all my youtube soundtracks can now move to google music!  woohoo!!!
>

As you've discovered, spaces in machineable filenames aren't great.
However for this case you may want to consider:
for F in *flv ; do echo "$F" ; done
The expanded *flv items are kept as single tokens. In fact this is why
"ls *flv" works to start with, it's the shell that expands the *
matches (globbing), not the ls command. ls just gets the separate file
names as arguments.


-- 
imalone
http://ibmalone.blogspot.co.uk


More information about the users mailing list