[buug] Spaces within filenames in a bash script
Brian Dessent
brian at dessent.net
Mon Jan 2 02:00:09 PST 2006
Joseph Zitt wrote:
> #!/bin/bash
> FILES=$(ls *.flac | cut -d '.' -f1)
> for i in $FILES; do
> echo converting: $i.flac
> flac -sdc $i.flac | lame - $i.mp3
> done
You should consider using find instead of ls. And it looks like what
you have would die if you had a filename with more than one "." in it.
# untested
find . -name \*.flac | while read F; do
echo "converting: $F"
flac -sdc "$F" | lame - "$(basename "$F" .flac).mp3"
done
By the way, just for simple commands the best way to do this is:
find /path -name \*.whatever -print0 | xargs -0 command
...which will handle filenames with spaces, quotes, tabs, newlines, and
anything else.
Brian
More information about the buug
mailing list