On 7 July 2013 20:18, Mike Wright mike.wright@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.