I have a bunch of wav files I converted to mp3 files using ffmpeg.
Now the mp3 files are all named file.wav.mp3.
How can I remove the .wav suffix while keeping the rest of the file name?
I would like to do this on a whole directory at once.
I have a bunch of wav files I converted to mp3 files using ffmpeg.
Now the mp3 files are all named file.wav.mp3.
How can I remove the .wav suffix while keeping the rest of the file name?
I would like to do this on a whole directory at once.
With a shell loop, removing the shortest "double dot suffix"
for f in *.wav.mp3; do echo mv "$f" "${f%.*.*}.mp3"; done
or (my personal favorite for things like this) with mmv from package mmv
mmv -n '*.wav.mp3' '#1.mp3'
Remove the echo or the -n as appropriate once you are happy that they are doing the right thing.
Read man rename and do something like:
rename 's/.wav.mp3/.mp3/' *.wav.mp3
You may have to sudo apt install rename, first.
In the file browser in Ubuntu, you can select multiple files and rename them according to a pattern by just hitting F2 or right-clicking and selecting Rename.
Here I am replacing x with _by_. In your case you can replace .wav with an empty string.
As you can see there are multiple ways to achieve this. Another way using the basename command is shown below:
for file in ./*.wav.mp3
do
mv "$file" "$(basename "$file" .wav.mp3)".mp3
done
If you have all the files named in .wav.mp3 format, then use the following command:
for i in *.wav.mp3; do echo $i; mv "$i" "${i::-8}.mp3"; done
When in the directory with the .wav.mp3 files:
for i in *.wav.mp3; do mv "$i" "$(echo $i | sed s/.wav//g)"; done
That said, you may be able to use the same for your ffmpeg command so you don't have to rename them later.
I just want to add a tool tip:
A real nice program for such tasks is emv.
You run it as `emv .wav.mp3 and it opens an editor. You can then use search & replace. Then you save the file and close the editor and the program renames your files.
This is especially handy, when you know how to use an advanced editor like vim, but even when most simple editors support search & replace, what is what you usually need for problems like yours.
#!/bin/bash
for i in *
do
#Define the string value
text="$i"
# Set .wav as the delimiter
IFS='.wav.'
#Read the split words into an array based on space delimiter
read -a strarr <<< "$text"
mv "$i" "${strarr[0]).mp3" #changing input file name
done