首页 > 解决方案 > 如何在不删除文件名的扩展点的情况下重命名

问题描述

为了用 .wav 和 .flac 扩展名重命名音乐样本,我使用了这一行:

for f in * ; do rename 's/[^a-zA-Z0-9:0:4]//g' "$f" ;done

但是会发生什么,当文件的名称是这样的时:

name * of ( the f?ile.wav 

它成为了:

nameofthefilewav

它应该是:

nameofthefile.wav

我需要什么才能在他的位置上获得扩展点?

标签: bashrename

解决方案


您可以使用basename和参数扩展来获取文件名及其扩展名。

filename=$(basename -- "$fullfile")
extension="${filename##*.}"
filename="${filename%.*}"

答案取自这里

编辑:

bash-4.1$ ls
1.mp3  2.mp3  3.mp3
bash-4.1$ for f in `ls`; do
filename=$(basename -- "$f")
extension="${filename##*.}"
filename="${filename%.*}"
echo "FROM: $filename.$extension TO: $filename.wav"
done
FROM: 1.mp3 TO: 1.wav
FROM: 2.mp3 TO: 2.wav
FROM: 3.mp3 TO: 3.wav

推荐阅读