Bash command -cut (oops last message truncated)

Mikkel L. Ellertson mikkel at infinity-ltd.com
Mon Sep 18 01:09:23 UTC 2006


neidorff wrote:
> Hi,
> 
> This baffles me, but should be very simple.
> 
> I have a directory with names of audio files.  I want to convert from
> one audio format to another.  No problem there. 
> 
> I want to create a script to do handle the change of file extension
> chores.  I came up with this:
> 
> #!/bin/bash
> FILES=$(ls *.flac | cut -f1 -d\.)
> for i in $FILES; do
>     echo converting: $i
>     flac -sd $i.flac -o  wav/$i.wav
> done
> 
> The first file is named "01 Introduction.flac"  and the problem that I
> have is that the first time I go through the for loop, "i" contains "01"
> the next time "i" contains "Introduction".  Since I set the delimiter
> (with the -d option in cut) to "." (escaped) why am I not having "i"
> contain "01 Introduction" the first time through the for loop?  What
> obvious thing am I missing here?
> 
> Thanks,
> 
> Mark
> 
Part of the problem is the spaces in the file names.  The loop is
treating spaces as delimiters for the data in $FILES. You may find
using basename works better for this application.

for i in *.flac ; do
	name=$( basename "$i" .flac )
	echo Converting $name
	flac -sd "$name.flac" -o "wav/$name.wav"
done

a slightly different way to do it would be:

for i in *.flac ; do
	name=$( basename "$i" .flac ).wav
	echo Converting $name
	flac -sd "$i" -o "wav/$name"
done

In ether case, you have to enclose the file name in quotes because
of the spaces.

Mikkel
-- 

  Do not meddle in the affairs of dragons,
for thou art crunchy and taste good with Ketchup!




More information about the fedora-list mailing list