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.
mv -n
or -i
for bulk/automated renames like this, to avoid the possibility of silently & irreversibly deleting files if there's a name conflict.
Jul 31, 2020 at 22:25
Read man rename
and do something like:
rename 's/.wav.mp3/.mp3/' *.wav.mp3
You may have to sudo apt install rename
, first.
rename
package first. It is not installed by default.
rename
with the -n
option first to see what it will do, then removing -n
once one is satisfied.
Jul 29, 2020 at 20:26
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
$file
contains whitespace, then basename "$file" .wav.mp3
will as well.
Jul 30, 2020 at 10:51
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
"${i::-8}.mp3"
should generate same result. Better to quote the whole string than to concat the strings
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
mmv
orrename
?