重命名文件的最后一部分(使用sed)

时间:2014-04-27 13:53:55

标签: bash

我做了一个转换音频比特率的“脚本”:

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')

但是我遇到了空间文件名

的问题

1 个答案:

答案 0 :(得分:3)

您不需要sedbash可以为您执行此操作。试试这个:

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

强调我的