我做了一个转换音频比特率的“脚本”:
for a in *.mp3 ; do ffmpeg -i "$a" -ar 44100 -ab 80k "$a [80].mp3" ; done
显然新文件将是:
filename one.mp3 [80].mp3
使用sed我想用新文件重命名旧文件,如:
filename one [80].mp3
我明白了:
mv $a $(echo $a | sed 's/.mp3//g')
但是我遇到了空间文件名
的问题答案 0 :(得分:3)
您不需要sed
,bash
可以为您执行此操作。试试这个:
for a in *.mp3 ; do ffmpeg -i "$a" -ar 44100 -ab 80k "${a%.*} [80].mp3" ; done
${a%.*}
是bash
参数替换,并从文件名中删除扩展名(基本上从后面删除最短匹配)。
阅读this了解详情。
devnull建议的替代方法是使用basename
。
for a in *.mp3 ; do ffmpeg -i "$a" -ar 44100 -ab 80k "$(basename -s.mp3 $a) [80].mp3" ; done
来自man
页面:
说明 打印NAME,删除任何前导目录组件。 如果指定,也删除尾随的SUFFIX。
Mandatory arguments to long options are mandatory for short options too. -a, --multiple support multiple arguments and treat each as a NAME -s, --suffix=SUFFIX remove a trailing SUFFIX
强调我的