Loading...

File name without extension in bash for loop

Answer #1 100 %

Use bash parameter expansion

${f%%.*}

Note that you need the greedy version because there are multiple dots in the file name.

From bash manual:

${parameter%word}

${parameter%%word}

The word is expanded to produce a pattern just as in filename expansion. If the pattern matches a trailing portion of the expanded value of parameter, then the result of the expansion is the value of parameter with the shortest matching pattern (the ?%? case) or the longest matching pattern (the ?%%? case) deleted. If parameter is [email protected]? or ??, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with [email protected]? or ??, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

Answer #2 100 %

This should do it:

for i in *.m4a; do
  ffmpeg -i $i ${i%%.*}.mp3
done
Tags: bash

You’ll also like:


© 2023 CodeForDev.com -